c/c++(疑4) 指標數組和數組指標之間關係,指標數組

來源:互聯網
上載者:User

c/c++(疑4) 指標數組和數組指標之間關係,指標數組
 1 指標數組和數組指標概述(數組指標(指向數組的指標)與指標數組(存放指標的數組))


指標數組:首先它是一個數組,數組的元素都是指標,數組佔多少個位元組由數組本身決定。它是“儲存指標的數組”的簡稱。

數組指標:首先它是一個指標,它指向一個數組。在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 繼續來看看地址之間的關係

intmain() {    int a[4]={1,2,3,4};    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 的內容。

其記憶體布局如:
好,問題就來了,這連續4 個byte 裡到底存了什麼東西呢?也就是說元素a[0],a[1]裡面的值到底怎麼儲存的。這就涉及到系統的大小端模式了,如果懂彙編的話,這根本就不是問題。既然不知道當前系統是什麼模式,那就得想辦法測試。大小端模式與測試的方法在第一章講解union 關鍵字時已經詳細討論過了,請翻到彼處參看,這裡就不再詳述。我們可以用下面這個函數來測試當前系統的模式。
int checkSystem( ) {    union check    {       int i;      char ch;    } c;    c.i = 1;    return (c.ch ==1); }如果當前系統為大端模式這個函數返回0;如果為小端模式,函數返回1。也就是說如果此函數的傳回值為1 的話,*ptr2 的值為0x2000000。如果此函數的傳回值為0 的話,*ptr2 的值為0x100




聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.