Re: [问题] 阵列名称所存的值与其所在的位置,两者的值为何相同

楼主: CFE220 (真‧220)   2021-06-08 13:18:14
※ 引述《lueichun (= =)》之铭言:
: 问题(Question):
: 假设有一个阵列,叫做int a[5];
: 则a==&a==&a[0],a==&a[0]可以理解,但为何a==&a?
: a的值是阵列开头的位置(假设是1000),且a本身也占有内存位置(假设是2000),
: 那&a不是应该是那个内存空间位置(2000)吗?
: 所以应该是两个不同的位置,但为何程式跑出来a==&a:
: int main (int argc,char *argv[]){
: int a[5];
: printf("%p %p %p",a,&a[0],&a);
: //结果为000000000062FE00 000000000062FE00 000000000062FE00
: return 0;
: }
: 二维阵列也是一样的状况,若有一阵列叫做num[3][4],则num==&num
: num[0]==&num[0] num[1]==&num[1]......
: 我看书上都没有解释的很清楚,希望有人可以解惑,拜托了。
版上许多神人大大已提供许多观点可供厘清,
小弟我仅补充 K&R 的书籍内容以供参详。
K&R p83(chapter 5.1 pointer and Addresses)
"...The & operator only applies to objects in memory: variables and array
elements. It cannot be applied to expressions, constants, or register
variables."
K&R p89(chapter 5.3 Pointers and Arrays)
"...But an array name is not a variable;..."
另外,根据 ISO/IEC 9899 对 object 的定义如下:
region of data storage in the execution environment,
the contents of which can represent values.
希望上述补充能令你质疑自己的想法(质疑使科学进步):
‘且a本身也占有内存位置’
p.s. 话说 K&R 没有使用过 &a, 仅有 &a[0] 或 a 来表示第零个元素的位址,
蛮有趣的。
作者: Lipraxde (Lipraxde)   2021-06-08 14:30:00
我记得 &a 好像是语法糖?

Links booklink

Contact Us: admin [ a t ] ucptt.com