#include<stdio.h>
int main(void) {
int arr[3]={1,2,3};
return 0;
}
现在*(&arr)
会给我什么,为什么?我想要一个详细的解释。不要只是告诉我如何取消*
和&
:P引用地址?
我想知道编译器如何解释此表达式以给出所需的结果。
#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
行为酷似arr
,如你所愿。
好吧,如果我说printf(“%d”,* &arr);它只是给了我&arr [0],第一个元素的地址,当你说它创建一个指针时,它是物理创建的吗? – n0nChun 2010-09-05 10:10:38
它“创建它”的方式与评估'2 + 3''创建'int'值'5'相同。 – caf 2010-09-05 10:16:51