C語言中數組&取地址的問題

 
 
#include <stdio.h>
int  main( void )
{
     int  a[5];
     printf ( "%x\n" , a);
     printf ( "%x\n" , a+1);
     printf ( "%x\n" , &a);
     printf ( "%x\n" , &a+1);
}

假如咱們的a的地址是:0Xbfe2e100, 並且是32位機,那麼這個程序會輸出什麼?數組

  • 第一條printf語句應該沒有問題,就是 bfe2e100
  • 第二條printf語句你可能會覺得是bfe2e101。那就錯了,a+1,編譯器會編譯成 a+ 1*sizeof(int),int在32位下是4字節,因此是加4,也就是bfe2e104
  • 第三條printf語句多是你最頭疼的,咱們怎麼知道a的地址?我不知道嗎?可不就是bfe2e100。那豈不成了a==&a啦?這怎麼可能?本身存本身的?也許不少人會以爲指針和數組是一回事,那麼你就錯了。若是是 int *a,那麼沒有問題,由於a是指針,因此 &a 是指針的地址,a 和 &a不同。可是這是數組啊a[],因此&a實際上是被編譯成了 &a[0]。
  • 第四條printf語句就很天然了,就是bfe2e104。仍是不對,由於是&a是數組,被當作int(*)[5],因此sizeof(a)是5,也就是5*sizeof(int),也就是bfe2e114。
相關文章
相關標籤/搜索