x什么意思c语言74,【每日一答】(74)数组名v.s.指针变量,《C语言其实很简单》形象比喻为“是一个朋友圈的”...

下图选自《C语言其实很简单》第8章:

202264283_2_20200915090950255_wm

202264283_3_20200915090950537_wm

问:请问张老师!书上第227页一句话:指针变量a本身的地址(a所在内存字节编号)是数组的地址,数值上与元素a[0]的地址相等!

这句话是什么意思,我看不懂!为什么指针变量所储存的地址跟它本身的地址,相等呢?

答:一本书的这一页是第5页,我上面再写个5,可以吧

这是规定,没为什么

问:那一个数组的第一个元素是不是也可以定义一个真实的指针变量,来储存第一个元素的地址呢?

答:a是数组名,所以a的地址也是a0的地址。a也是个假想的指针变量,既然是假想的,不能跟真的一模一样,这个假指针特点就是储存的地址跟它本身的地址相等,而且地址不可更改。

int a[5];

int *p;

p=&a[0];

可以的呀

p=&a[0]; 等价于 p=a;

因为 &a[0] 等价于 a

因为 a[0] 等价于 *(a+0) 为什么?语法糖公式,必须熟练掌握!

所以 &a[0] 等价于 &*(a+0)

&和*抵消,所以就是a+0,那就是a了。所以 &a[0] 等价于 a

语法糖公式推也能推出来。好玩不,指针就是游戏,很好玩的

任何一种方法都可以得出结论。

问:老师!我感觉数组名跟变量一样,也可以表示整个数组的空间!比如:int a[]={1,2,3};printf("%d",sizeof(a)); 最后的结果就是12,说明把数组的整个空间都涵盖了!数组名有两个含义:一个是指针常量,一个是数组的整个空间。

这样理解正确么

指针变量占4个字节,而int a[]={1,2,3};printf("%d",sizeof(a)); 最后的结果就是12,不是4,请问老师什么时候数组名用做指针,什么时候不用做指针呢?

202264283_4_20200915090950880

答:规定:sizeof(数组名)返回整个数组占用的字节数,sizeof(指针变量)返回4

这是规定。不能你那样认为呀。

记住要点,把握住要点,我们《C语言其实很简单》中强调的概念要点,一定要把握住!不要总持怀疑态度,总觉得我们给的概念和要点是错的,然后非要自己总结一套……那样你会走很多弯路!

看你这几次问的这些问题,都是属于这种情况。

我们《C语言其实很简单》是十几年教学经验的汇总,又参考了大量权威教材,更得到专家的多次认可,还参加过比赛……所以不要质疑,里面给大家总结的都是正确的。都要认真牢记!而且里面的这些总结的概念,都是经过无数次同学的摔打总结出来的,让大家少走弯路的概念,你掌握牢,很多问题可以消灭于无形!能节省你很多很多时间当然欢迎大家提出问题,指正本书或讨论。但对于初学者,请先学扎实基本功,然后我们再讨论和质疑。否则,你将陷入弯路,耽误自己的时间。

PS:《C语言其实很简单》出版5年了。除勘误外,未有发现任何原则问题。202264283_5_20200915090951271你若喜欢,点个“在看”

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值