2011-04-06 132 views
3

的陣列的聲明在i執行此代碼問題的指針

#include<stdio.h> 

int main() { 
int (*x)[5]; 
printf("\nx = %u\nx+1 = %u\n&x = %u\n&x + 1 = %u",x,x+1,&x,&x+1); 
} 

這是在C或C++輸出:

x = 134513520 
x+1 = 134513540 
&x = 3221191940 
&x + 1 = 3221191944 

請解釋。還有什麼區別:

int x[5]int (*x)[5]

+0

[cdecl](http://cdecl.org/?q=int+%28%2Ax%29%5B5%5D)是你的朋友。 – 2011-04-06 19:36:21

回答

7
  • int x[5]是一個數組5個整數
  • int (*x)[5]指向一個由5個整數組成的數組

當您增加一個指針時,將按指向類型的大小遞增。因此x+1不僅僅是x5*sizeof(int)字節 - 用0x14的差異,或20

&x80483708048384十六進制值是一個指針的指針 - 所以,當你增加它添加sizeof(a pointer)字節 - 這使bf9b08b4bf9b08b8十六進制值,相差4。

3
int x[5]; 

聲明一個五個整數的數組。

int (*x)[5]; 

聲明一個指向5個整數數組的指針。

您可能會感興趣cdecl.org有用。

+0

這是很好的鏈接。 – Mat 2011-04-06 19:30:56

4
int (*x)[5]; 

聲明指向數組的指針。

從問題的標題,你可能想

int* x[5]; 

來代替,該聲明指針數組。

int x[5]; 

聲明瞭一個普通的舊數組int s。

5
  1. int x[5]是5個整數
  2. int (*x)[5]的陣列是一個指向5個整數
  3. int* x[5]的陣列5個指針數組以整數