首先用一个实例来说明二维数组的第一维单元存储的是第二维的地址。如下:
int main(int argc, char *argv[])
{
char arr[5][5];
printf("%d\n", arr);
printf("%d\n", arr[0]);
printf("%d\n", &arr[0][0]);
return 0;
}
三行输出结果是一样的,都是[0][0]元素的地址,也就是说二维数组名和第一维单元都表示数组首址,也是00元素的地址。相当于纵向一维的每个元素存的是第二维的索引地址。
关于字符串有个实例情况说明:char *aa[2]={“abcd”,”ABCD”},显然这是指针数组的模式,所以数组的两个元素其实是两个字符串的首地址,而不是两个字符串,这个用法与char a[2][5]是一样的,第一维存的全都是地址。用%s格式输出aa[0],aa[1]就可以输出字符串。如下:
int main(int argc, char *argv[])
{
char *str[2] = {"abc", "bcd"};
printf("%s %s\n", str[0], str[1]);
return 0;
}
得abc bcd。而且本身%S的参数本来就应该是字符串地址。另外注意的是指针的加减是以指针类型长度为单位,不是以字节为单位。
阅读(2546) | 评论(0) | 转发(0) |