09c语言学习资料 三、数组

 

4-14-3一维数组,二维数组,字符数组与字符串

数据类型包括了基本类型,构造类型,指针类型,和空类型。其中基本类型包括了整型,字符型,浮点型和枚举类型。而构造类型包括了数组类型,结构体类型和共用体类型。

构造类型数据是由基本类型数据按一定规则组成的。

1、一维数组

程序里数据实际上是存放在地址段里面的,定义一个整型变量int a,则开辟一个4字节(根据编译环境的不同大小会不一样,不过现在整型一般是4字节)的空间:一个字节是8位(bit)。

定义一个整型数组int a[5],开辟5个连续的4字节空间:

 

定义一个短整型数组short  int  b[5],开辟5个连续的2字节空间:

有时取a[k+1],这个“1”其实在地址段里面是加4个字节的,这样就直接跳到下一个整型元素了

 

(1)、一维数组的初始化:

如 int a[5]={3,4,5,6,7}; 

这样首元素a[0]的值为3,元素a[1]的值为4,一直到a[4]的值为7

注意:1、不存在a[5]的,因为是从0开始的,5个数组元素是a[0]a[4]。如果读取a[5]的话就越界了2、定义时元素的个数不能超过数组括号里的个数,不然就越界了。

int a[3]={1,2,3,4,5,6};是错的

 

如果元素的个数小于数组括号里的个数,那么剩余没有赋值的元素值为0

int a[7]={1,2,3,4};

那么后面的3个元素值为0。就是a[0]=1,a[1]=2,a[2]=3,a[3]=4,a[4]=0,a[5]=0,a[6]=0

如果这样写:int a[ ]={1,2,3,4}; 也是可以的,这样括号内的数字默认为4个,数组共有4个元素

如果这样写:int a[4]={0}; 那么4个元素的值都初始化为0

如果这样写:int a[4]={ }; 则只是开辟了空间,没有赋予元素任何的值

 

(2)、一维数组的引用:

数组的格式:数组名[下标]

在访问数组元素时,数组下标的数据类型允许是 整形表达式,如232+3a+1a+b或者是整型常量的形式:#define SIZE 10    int a[SIZE];

而初始化数组时,和访问数组唯一的区别是下标不能出现变量,a+1a+b就不行了,因为c语言中不允许对数组的大小做动态定义,即数组的大小不依赖于程序运行过程中变量的值

 

数组元素a[1]是一个值。所以如果用赋值语句对它赋值的话scanf语句里面还是要加&取地址符号的。如scanf(“%d”,&a[1]);

 

 

2、二维数组

地址段中的二维数组:int a[3][4],实际上也是存放在一条连续的地址段里

看上去a[0+1][2]里面是加了一个”1”,实际上地址段里面跳过了4个元素的地址,这个了解一下,第二学期的指针那里会学到。

 

(1)、二维数组的初始化

仔细看书上第137页到138页,有各种二维数组的初始化方式

如果要对全部元素都赋初值,则定义数组时对第一维的长度可以不指定,但是第二位的长度不能省。如int a[ ][4]={1,2,3,4,5,6,7,8}

 

(2)、二维数组的引用

遵循一维数组的引用方法注意

 

 

3、字符数组与字符串

(1)、字符数组的定义:

定义:char a[5];

赋值:a[0]=’I’;a[1]=’ ’;a[2]=’a’;a[3]=’m’;a[4]=’ ’;

或者合起来写:char a[5]={‘h’, ’a’, ’p’, ’p’, ’y’};

如果:char a[8]={‘h’,’a’,’p’,’p’,’y’}; 那么最后三个未赋值的元素系统自动定为’/0’。

如果定义时用int a[5]也可以的,但是浪费储存空间

注意这里的字符数组都是用单引号’’单个赋值的

 

字符串是作为字符数组来处理的,字符’/0’作为“字符串结束的标志”,字符数组中在遇到字符’/0’时,表示字符串结束,由它前面的字符组成字符串。

 

(2)、字符串的定义:

单个定义:char a[8]={‘h’,’a’,’p’,’p’,’y’}; 只要最后一个是系统自动定义的’/0’就行

也可以连续定义:char a[ ]={”happy”}; 或者char a[ ]=”happy”;

注意这时系统会自动在这串字符的最后加上一个’/0’,数组a的长度不是5而是6,一定注意。

此例如果要在下标处加入数字的话,也一定要大于等于6,如果char a[5]=”happy”; 则数组越界,出错了。

(这里是用””连续初始化,如果之前用’’单个赋值:char a[5]= {‘h’,’a’,’p’,’p’,’y’}; 则是可以的,因为这里系统不会自动在最后加一个字符’/0’)

如果是char a[ 9]=”happy”; 的情况,系统会设定后面剩余的3个元素都为’/0’

 

(3)、字符数组的输入输出

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值