天天看點

c語言int *p m=5n,c語言 int (*p)[5] 類型分析

#include

int main()

{

int i;

int  b[5]={1,3,5,7,9};

int  (*a)[5] = &b;

int  *m = a;        //a範圍内的空間依照 int大小來取值

for(i = 0;i<5;i++)

{

printf("%d\n",m[i]);

}

return 0;

}

輸出結果為 1 2 3 4 5

當中  int  (*a)[5]  表示在棧中産生一個大小為   5個int的空間  a代表的的是整個空間的首位址

int  *m = a;定義的是它的取值偏移量。也就是說一個整形指針*m 首位址為開辟的a的空間的首位址

為更好分析以下的程式就能讓你更能懂了:

#include

int main()

{

int i;

short  b[5]={1,3,5,7,9};

int  (*a)[5] = &b;

short *m = a;        //a範圍内的空間依照 int大小來取值

for(i = 0;i<5;i++)

{

printf("%d\n",m[i]);

}

return 0;

}

輸出結果為 :1 2 3 4 5

由(*a)[5]産生一個空間大小為5個int的空間,空間的首位址和數組的首位址同樣。僅僅是一個空間而已未定義其取值方式。由short  *m = a;表示取其空間大小為short的類型。這個類型和int (*a)[5]沒有關系,int (*a)[5]值負責産生空間。沒有類型,有點類似于malloc

函數。

細緻推敲有助于深入了解。

版權聲明:本文部落客原創文章。部落格,未經同意不得轉載。