#include<stdio.h>
int main(void) {
int arr[3]={1,2,3};
return 0;
}
现在,
*(&arr)
给我什么?为什么?我想要一个详细的解释。不要只告诉我如何*
和&
取消:P我想知道编译器是如何解释这个表达式来给出所需的结果的。
最佳答案
&arr
创建指向数组的指针-它的类型为int (*)[3]
,并指向数组arr
。*&arr
取消对指针的引用-这是数组本身。现在,现在发生什么取决于你用它做什么。如果使用*&arr
作为sizeof
或&
运算符的主题,则它分别给出数组的大小或地址:
printf("%zu\n", sizeof *&arr); /* Prints 3 * sizeof(int) */
但是,如果在任何其他上下文中使用它,则它将被计算为指向其第一个元素的指针:
int *x = *&arr;
printf("%d\n", *x); /* Prints 1 */
换句话说:
*&arr
的行为与您所期望的完全一样。