指標陣列和陣列指標之間關係

2021-08-17 00:25:55 字數 1956 閱讀 6775

指標陣列:首先它是乙個陣列,陣列的元素都是指標,陣列佔多少個位元組由陣列本身決定。它是「儲存指標的陣列」的簡稱。

陣列指標:首先它是乙個指標,它指向乙個陣列。在32 位系統下永遠是佔4 個位元組,至於它指向的陣列佔多少位元組,不知道。它是「指向陣列的指標」的簡稱。

1 int *ptr1[10];

2 int (*ptr2)[10];

要分析上面的問題,我希望你知道符號之間的優先順序(

c語言入門教程

)也會分析這些基礎,而又實用的知識。

這個地方就直接說明:」的優先順序比「*」要高

*****ok  有了上面的基礎就可以開始分析

ptr1先與「」結合,構成乙個陣列的定義,陣列名為ptr1,int *修飾的是陣列的內容,即陣列的每個元素。那現在我們清楚,這是乙個陣列,其包含10個指向int 型別資料的指標,即指標陣列。

至於ptr2就更好理解了,在這裡「()」的優先順序比「」高,「*」號和ptr2 構成乙個指標的定義,指標變數名為ptr2,int 修飾的是陣列的內容,即陣列的每個元素。陣列在這裡並沒有名字,是個匿名陣列。那現在我們清楚ptr2 是乙個指標,它指向乙個包含10個int 型別資料的陣列,即陣列指標。

***** 繼續來使用記憶體來分析

2 繼續來看看位址之間的關係

[cpp]view plain

copy

print

?intmain()  

;  int *ptr1=(int *)(&a+1);  

int *ptr2=(int *)((int)a+1);  

printf(」%x,%x」,ptr1[-1],*ptr2);  

return 0;  

}  

intmain()

; int *ptr1=(int *)(&a+1);

int *ptr2=(int *)((int)a+1);

printf("%x,%x",ptr1[-1],*ptr2);

return 0;

}

ptr1:將&a+1 的值強制轉換成int*型別,賦值給int* 型別的變數ptr,ptr1 肯定指到陣列a 的下乙個int 型別資料了。ptr1[-1]被解析成*(ptr1-1),即ptr1 往後退4 個byte。所以其值為0x4。

ptr2:按照上面的講解,(int)a+1 的值是元素a[0]的第二個位元組的位址。然後把這個位址強制轉換成int*型別的值賦給ptr2,也就是說*ptr2 的值應該為元素a[0]的第二個位元組開始的連續4 個byte 的內容。

其記憶體布局如下圖:

第一章講解union 關鍵字時已經詳細討論過了,請翻到彼處參看,這裡就不再詳述。我們可以用下面這個函式來測試當前系統的模式。

[cpp]view plain

copy

print

?int checksystem( )  

c;  

c.i = 1;  

return (c.ch ==1);  

}  如果當前系統為大端模式這個函式返回0;如果為小端模式,函式返回1。也就是說如果此函式的返回值為1 的話,*ptr2 的值為0x2000000。如果此函式的返回值為0 的話,*ptr2 的值為0x100  

int checksystem( )

c;c.i = 1;

return (c.ch ==1);

}如果當前系統為大端模式這個函式返回0;如果為小端模式,函式返回1。也就是說如果此函式的返回值為1 的話,*ptr2 的值為0x2000000。如果此函式的返回值為0 的話,*ptr2 的值為0x100

**:

指標和陣列的關係

指標和陣列的關係 參考朱有鵬c語言大講堂 1 指標和陣列的型別匹配的問題 int p int a 5 p a 型別的匹配的問題 p a a和a的數值是一樣的,但是 a時表示整個陣列的大小的 位址的列印是一樣的。a a a 0 從數值上看是完全一樣的,從意義上面看,a和 a是整個陣列的首位址,從型別來...

指標和陣列關係初探

指標是c語言中的精髓。高質量c 程式設計指南 的作者林銳就曾說過 不會正確使用指標,肯定算不上是合格的程式設計師。昨晚我思考了一宿,自認找到了理解指標的正確途徑。本文試圖通過 指標和陣列的關係去研究指標。一般的c語言教科書上都會有這樣的話 指標就是位址,陣列名就是指標的首位址。這些不能不說是錯誤的,...

指標和陣列的關係

陣列名是乙個指標常量,表示陣列第乙個元素的的起始位址。如 int a 5 a表示陣列第乙個元素a 0 的起始位址 a 0 一 引用陣列元素的方法 用陣列下標引用陣列元素 陣列a中元素用下標表示為 a 0 a 1 a 2 a 3 a 4 用指標引用陣列元素 陣列a中元素用下標表示為 int p a p...