A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 瑜尚 中级黑马   /  2016-7-19 18:17  /  1373 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

#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;
}
代码如上,请大神注释一下每行的意思,看不懂

4 个回复

倒序浏览
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
回复 使用道具 举报
看了上面的回复,我觉得有没说清的地方。二维数组中第一行的首地址就是数组的地址,也是数组第一个元素的地址,也是数组名取地址后的地址。其他的大概都是一些指针的加减,那个不是很复杂。你可以把二维数组当成一个同类型的以为指针数组去理解,会好很多。
回复 使用道具 举报
其实也没必要太过于担心这个弄得不是很清楚,如果能懂下面的代码,应该就没什么问题了。
char arr[3][4]={"abc","def","ghi"};等价于char *arr[3]={"abc","def","ghi"};
二维数组每一行的首地址就是一维指针数组每个元素的值。
回复 使用道具 举报
18222929637 发表于 2016-7-20 20:03
其实也没必要太过于担心这个弄得不是很清楚,如果能懂下面的代码,应该就没什么问题了。
char arr[3][4]={" ...

感谢回复解答,通过你的指点理解了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马