黑马程序员技术交流社区

标题: 指针访问二维数组的问题 [打印本页]

作者: 408205555    时间: 2015-7-22 18:43
标题: 指针访问二维数组的问题
printf(“ *(a+1) =%p\n”,*(a+1));
printf(“&a[1][0]=%p\n”,&a[1][0]);

第一句代码:
a+1 表示第二行的首地址,*(a+1)应该是取值啊!怎么控制台输出的时候输出的却是地址呢?

问题.jpg (62.79 KB, 下载次数: 64)

问题.jpg

作者: 408205555    时间: 2015-7-22 19:18
反复看了n遍视频,弄懂了。
二维数组都是特殊的一维数组。
int a[3][4]={1....23};
也可以理解成这样int a[3][4]={a[0],a[1],a[2]};
所以*(a+1)的值就是a+1所指地址的值,为a[1]。
而a[1]的值是第二行的首地址。
所以*(a+1)输出的是地址。

不知道我说的对不对?
作者: 慕名黑马生    时间: 2015-7-22 21:47
晕,你输出函数里面的格式控制符是%p,你要输出值?“9”既有地址也有值,输出值用%d
作者: 408205555    时间: 2015-7-23 10:57
慕名黑马生 发表于 2015-7-22 21:47
晕,你输出函数里面的格式控制符是%p,你要输出值?“9”既有地址也有值,输出值用%d ...

那看来是我理解错了?就是格式控制符的作用?
作者: 慕名黑马生    时间: 2015-7-23 12:24
408205555 发表于 2015-7-23 10:57
那看来是我理解错了?就是格式控制符的作用?

对的,刚开始我也混淆,你多敲敲代码,各种情况都试试,慢慢就了解了

作者: 408205555    时间: 2015-7-23 13:05
慕名黑马生 发表于 2015-7-23 12:24
对的,刚开始我也混淆,你多敲敲代码,各种情况都试试,慢慢就了解了

嗯,谢谢啦
作者: 丁铭检    时间: 2015-7-23 20:46
408205555 发表于 2015-7-22 19:18
反复看了n遍视频,弄懂了。
二维数组都是特殊的一维数组。
int a[3][4]={1....23};

可以这么理解。。二维数组的一维其实就是二维的首地址。。
作者: liusuizuoyou    时间: 2015-7-24 00:49
a+1 与*(a+1) 打印出来的地址是相同的  只是面相的对象不一样  a+1面相的是行  而*(a+1)面向的是列
a+1指的是  1行的首地址        
*(a+1)指的是 1行0列的地址
作者: 蓝蓝    时间: 2015-7-24 02:03
%p输出是地址,%d输出的才是int类型的值
作者: 408205555    时间: 2015-7-24 10:43
谢谢大家的解答:)
作者: LSwbfil2015    时间: 2015-7-25 09:45
%p输出地址




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2