#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的行为与您所期望的完全一样。

07-24 09:46
查看更多