å‚考地å€ï¼Ÿ

时间:2010-09-05 09:57:50

标签: c arrays pointers

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

现在*(&arr)会给我什么以åŠä¸ºä»€ä¹ˆï¼Ÿæˆ‘想è¦ä¸€ä¸ªè¯¦ç»†çš„解释。ä¸è¦åªå‘Šè¯‰æˆ‘*å’Œ&如何å–消:P

我想知é“编译器如何解释此表达å¼ä»¥æ供所需的结果。

2 个答案:

答案 0 :(得分:6)

&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完全相åŒï¼Œæ­£å¦‚您所期望的那样。

答案 1 :(得分:-1)

由于arr是é™æ€åˆ†é…的数组,而ä¸æ˜¯æŒ‡é’ˆå˜é‡ï¼Œå› æ­¤è¡¨è¾¾å¼&arrç­‰åŒäºŽarr。因此*(&arr)实际上是*arr。

如果arr是指针,情况会有所ä¸åŒã€‚