有人可以帮我解释数组衰减吗?具体来说,我很困惑1)数组如何引用自身,2)当我定义
时是否正确?int array[] = { 45, 67, 89 };
那么数组,&数组和&数组[0]都引用这个数组?我发现它们在打印时看起来是相同的输出,但是它们在内存中也指的是完全相同的东西吗?
答案 0 :(得分:8)
那么数组,&数组和&数组[0]都引用这个数组?
内存位置相同,但类型不同。
array
就是这样:一个包含3个整数的数组&array
的类型为int (*)[3]
,指向数组的指针&array[0]
的类型为int *
,指向单个整数的指针答案 1 :(得分:2)
array
,在值上下文中是int *
类型,指针指向数组的第一个元素。 &array
,类型为“int
数组[3]的指针”并指向整个array
。 &array[0]
的类型为int *
,并指向数组的第一个元素。
因此,&array[0]
与array
相同,如果在值上下文中使用array
。 {/ 1}}运算符中包含array
未在值上下文中使用的一种情况。因此:sizeof
将与sizeof array
不同。
我们举一个例子:
sizeof &array[0]
答案 2 :(得分:0)
它们都指的是相同的内存位置,但差别不大。 array
和&array
引用整个数组,以第一个元素的地址开头,而&array[0]
仅引用数组中的第一个元素。