数组的定义与初始化

数组

数组的定义,类型说明符 数组名[常量表达式] 常量表达式包括:常量和符号常量

数组的引用,数组名[下标] 下标可以是:整型常量或整型表达式

数组的初始化

可以在定义时对全部数组元素赋初值

只给一部分赋初值,其余的会自动为0,字符型为’\0’,指针型数组NULL

可以这样定义并赋初值:int x[][3] = { {1,2,3},(4,5,6) };

不能用赋值语句将一个字符串常量或字符数组直接给一个字符数组

strlen测试字符串长度,不包括’\0’

字符串指针变量和字符数组的比较

char *a;		  //a为字符指针变量
a="I love China!";//将字符串首元素地址赋给指针变量,合法。但赋给a的不是字符串,而是字符串第一个元素的地址
//不能对字符数组名赋值,因为数组名是常量,不能被赋值
char str[10];
str="I love China!";//非法

char * a="12345";<====>char * a; a = "12345"; //相当于将字符串的首地址给a初始化, 且字符串常量无法更改
char str[10]="12345";  不等价于 char str[10];str[]="12345";

char * a;
scanf("%s",a);//字符指针变量未初始化,存储单元是个未知值,会出错

char * a, str[10];
a=str;	//将a指向str数组的首元素
scanf("%s",a);

指针变量的值是可以改变的,而字符数组名代表一个固定的值(数组元素的首地址),不能改变。

int *a[ ]和int (*a)[ ]的区别

int *a[5]是指针数组,int ( *a)[5]是数组指针

前者表示一个数组,数组元素都是指向int型变量的指针;

后者表示一个指针,该指针指向一个int型有5个元素的数组。

第一个a是个数组名,里面保存的是int指针。
第二个a是个指针名,它指向一个包含5个数据的int数组。

计算数组的地址

一维整型数组 &a[i]的地址:a+i*4

二维整型数组

int a[3][5];
&a[i][j]的地址:a+(i*5+j)*4;
二维数组A[8][9]按行优先顺序存储,若数组元素A[2][3]的存储地址为1087,A[4][7]的存储地址为1153...
求数组元素A[6][7]的存储地址?

A[2][3]到A[4][3]有9*2=18个元素,A[4][3]到A[4][7]有4个元素,总共22个元素,
而地址相差1153-1087=66,所以每个元素占3个字节。
A[4][7]到A[6][7]有18个元素,所以A[6][7]地址为18*3+1153=1207
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值