读书人

C语言中的指针=地址吗?解决方法

发布时间: 2013-01-21 10:15:38 作者: rapoo

C语言中的指针=地址吗?
谭浩强的书上多次明确指出:指针就是地址,凡是出现指针的地方都可以看成地址

也就是说,谭浩强的书认为指针就=地址

但是有人告诉我说指针!=地址

我到底该信谁?
[解决办法]
接着73楼我的回复继续说。
把“指针”与“指针变量”分别说:
指针作为一种“类型”,包括了地址值和指向对象的类型两种属性--地址值是显式表示的,而指向对象的类型则是隐性的但可以参与计算的。指针的两个属性可延伸到指针常量、指针变量、指针表达式等概念中。
1.&a[0][0],&a[0](a),&a都是指针常量,地址值在定义域内不变!值相同但是类型不同!
2.指针变量则是存储地址值的变量,并且要求“强”类型一致(或相容)的!
3。指针表达式(即不叫指针变量表达式,也不叫地址表达式)是由指针常量、指针变量加上有限的算术运算规则,及个别的指针运算符(*和&)和类型转换符连接而成:
&a[0][0]是指针,&a[0][0]+1(这里并没有指针变量!)是指针+偏移构成的指针表达式,这个偏移显然与a[0][0]的类型相关,而地址值则是&a[0][0]+sizeof(a[0][0])=2000+4
&a[0]也是指针,&a[0]+1也是指针加偏移构成的指针表达式,字面上看到的偏移值也是1,但是这个偏移是与a[0]类型相关的,从地址值上看是&a[0]+sizeof(a[0])=2000+12
&a也是指针,&a+1这个指针表达式从地址值上看是&a+sizeof(a)=2000+24
*运算符能转换类型,*a即*(&a[0])=>*&a[0]=>a[0]=>&a[0][0],则*a+1中的偏移值1的类型就跟着变了

===========================================

读书人网 >C语言

热点推荐