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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 408205555 中级黑马   /  2015-7-22 18:43  /  1125 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

printf(“ *(a+1) =%p\n”,*(a+1));
printf(“&a[1][0]=%p\n”,&a[1][0]);

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

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

问题.jpg

11 个回复

倒序浏览
反复看了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)输出的是地址。

不知道我说的对不对?
回复 使用道具 举报
晕,你输出函数里面的格式控制符是%p,你要输出值?“9”既有地址也有值,输出值用%d
回复 使用道具 举报
慕名黑马生 发表于 2015-7-22 21:47
晕,你输出函数里面的格式控制符是%p,你要输出值?“9”既有地址也有值,输出值用%d ...

那看来是我理解错了?就是格式控制符的作用?
回复 使用道具 举报
408205555 发表于 2015-7-23 10:57
那看来是我理解错了?就是格式控制符的作用?

对的,刚开始我也混淆,你多敲敲代码,各种情况都试试,慢慢就了解了
回复 使用道具 举报
慕名黑马生 发表于 2015-7-23 12:24
对的,刚开始我也混淆,你多敲敲代码,各种情况都试试,慢慢就了解了

嗯,谢谢啦
回复 使用道具 举报
408205555 发表于 2015-7-22 19:18
反复看了n遍视频,弄懂了。
二维数组都是特殊的一维数组。
int a[3][4]={1....23};

可以这么理解。。二维数组的一维其实就是二维的首地址。。
回复 使用道具 举报
a+1 与*(a+1) 打印出来的地址是相同的  只是面相的对象不一样  a+1面相的是行  而*(a+1)面向的是列
a+1指的是  1行的首地址        
*(a+1)指的是 1行0列的地址
回复 使用道具 举报
蓝蓝 中级黑马 2015-7-24 02:03:34
9#
%p输出是地址,%d输出的才是int类型的值
回复 使用道具 举报
谢谢大家的解答:)
回复 使用道具 举报
学习学习!
回复 使用道具 举报
%p输出地址
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马