一維陣列a[5]中&a和a區別

qingfeng_96發表於2018-11-05


#include "stdio.h"

int main()
{
int a[5]={1,2,3,4,5};
int *ptr=(int *)(&a+1);
printf("%d,%d",*(a+1),*(ptr-1));
    return 0;
}

答案:2,5

區別:a代表陣列a[5]的首地址,&a代表陣列整體的地址,雖然他們的地址數是一樣的,但是含義不一樣的。

注意 a 是表示陣列a[5] 的。

*(a + 1) 和 *(&a + 1)區別見見下圖。*(a + 1) 這個好理解,但*(&a + 1)理解起來彆扭,把&a看成表示陣列整體的長度,加一表示陣列整體長度後移(見圖紅色的方框,到了a[5]位置,其實陣列只有到a[4],所以相當與陣列整體後移了)。

 

 

相關文章