参考地址?

n0n*_*hun 1 c arrays pointers

#include<stdio.h>
int main(void) {
int arr[3]={1,2,3};
return 0;
}
Run Code Online (Sandbox Code Playgroud)

现在*(&arr)会给我什么以及为什么?我想要一个详细的解释.不要只告诉我怎么*&抵消:P

我想知道编译器如何解释此表达式以提供所需的结果.

caf*_*caf 6

&arr创建一个指向数组的指针 - 它是类型的int (*)[3],并指向数组arr.

*&arr取消引用指针 - 它就是数组本身.现在,现在发生的事情取决于你用它做什么.如果您使用的*&arr是无论是主题sizeof还是&运营商,然后分别给出了数组的大小或地址:

printf("%zu\n", sizeof *&arr);    /* Prints 3 * sizeof(int) */
Run Code Online (Sandbox Code Playgroud)

但是,如果您在任何其他上下文中使用它,那么它将被计算为指向其第一个元素的指针:

int *x = *&arr;
printf("%d\n", *x);    /* Prints 1 */
Run Code Online (Sandbox Code Playgroud)

换句话说:*&arr行为完全像arr你期望的那样.

  • 它"创建它"的方式与评估"2 + 3""创建"int"值"5"的方式相同. (2认同)