黑马程序员技术交流社区
标题:
二维数组疑问
[打印本页]
作者:
瑜尚
时间:
2016-7-19 18:17
标题:
二维数组疑问
#include <stdio.h>
int main(int argc, const char * argv[]) {
int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
printf("a=%p\n",a);
printf("&a[0]=%p\n",&a);
printf("a+1=%p\n",a+1);
printf("&a[1]=%p\n",&a[1]);
printf("a[0]+1=%p\n",a[0]+1);
printf("*a+1=%p\n",*a+1);
printf("*(a[0]+1)=%d\n",*(a[0]+1));
printf("*(*(a)+1=%d\n",*(*(a)+1));
return 0;
}
代码如上,请大神注释一下每行的意思,看不懂
作者:
李江波
时间:
2016-7-20 15:33
printf("a=%p\n",a);//数组首地址 printf("&a[0]=%p\n",&a);//数组首地址 printf("a+1=%p\n",a+1); //第2行首地址 printf("&a[1]=%p\n",&a[1]); // 第2行指针 printf("a[0]+1=%p\n",a[0]+1); //第2列指针 printf("*a+1=%p\n",*a+1); // a数组的地址加了一个4*4=16字节 printf("*(a[0]+1)=%d\n",*(a[0]+1)); //第2列的第一个 printf("*(*(a)+1=%d\n",*(*(a)+1)); //输出的应该是2
作者:
18222929637
时间:
2016-7-20 19:56
看了上面的回复,我觉得有没说清的地方。二维数组中第一行的首地址就是数组的地址,也是数组第一个元素的地址,也是数组名取地址后的地址。其他的大概都是一些指针的加减,那个不是很复杂。你可以把二维数组当成一个同类型的以为指针数组去理解,会好很多。
作者:
18222929637
时间:
2016-7-20 20:03
其实也没必要太过于担心这个弄得不是很清楚,如果能懂下面的代码,应该就没什么问题了。
char arr[3][4]={"abc","def","ghi"};等价于char *arr[3]={"abc","def","ghi"};
二维数组每一行的首地址就是一维指针数组每个元素的值。
作者:
瑜尚
时间:
2016-7-20 21:17
18222929637 发表于 2016-7-20 20:03
其实也没必要太过于担心这个弄得不是很清楚,如果能懂下面的代码,应该就没什么问题了。
char arr[3][4]={" ...
感谢回复解答,通过你的指点理解了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2