#include<stdio.h>
int main(void) {
int arr[3]={1,2,3};
return 0;
}
现在*(&arr)
会给我什么以åŠä¸ºä»€ä¹ˆï¼Ÿæˆ‘想è¦ä¸€ä¸ªè¯¦ç»†çš„解释。ä¸è¦åªå‘Šè¯‰æˆ‘*
和&
如何å–消:P
我想知é“编译器如何解释æ¤è¡¨è¾¾å¼ä»¥æ供所需的结果。
ç”案 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
是指针,情况会有所ä¸åŒã€‚