c/c++(疑3) C語言指標與數組之間關係

來源:互聯網
上載者:User

標籤:

c/c++ (疑1)數組和指標

c/c++(疑2) const extern

有了前面 兩篇 基礎,下面我們可以更深入的來介紹c/c++(疑3) C語言指標與數組之間關係

1 概述(C語言指標與數組之間關係)



指標就是指標,指標變數在32 位系統下,永遠佔4 個byte,其值為某一個記憶體的地址。指標可以指向任何地方,但是不是任何地方你都能通過這個指標變數訪問到。

數組就是數組,其大小與元素的類型和個數有關。定義數組時必須指定其元素的類型和個數。數組可以存任何類型的資料,但不能存函數。



2     a 和&a 的區別(為下文C語言指標數組和數組指標埋下伏筆)

來看看下面的代碼
<pre name="code" class="cpp">int _tmain(int argc, _TCHAR* argv[]){int a[4]={1,2,3,4};int *ptr0 = (int*)(int)a;//01 00 00 00 02 00 00 00 03 00 00 00 04 00 00 00 cc cc ccint *ptr1=(int *)(&a+1);int *ptr2=(int *)((int)a+1);//00 00 00 02 00 00 00 03 00 00 00 04 00 00 00 cc cc cc ccint *ptr3 = (int *)((int)a+2);//00 00 02 00 00 00 03 00 00 00 04 00 00 00 cc cc cc cc 3cint *ptr4 = (int *)((int)a+3);//00 02 00 00 00 03 00 00 00 04 00 00 00 cc cc cc cc 3c d2int *ptr5 = (int *)((int)a+4);//02 00 00 00 03 00 00 00 04 00 00 00 cc cc cc cc 3c d2 d8int *ptr=(int *)(&a+1);printf("%d,%d",*(a+1),*(ptr-1));printf("%x,%x,%x,%x,%x,%x",ptr1[-1],*ptr2,*ptr3,*ptr4,*ptr5);//下一篇文章講解getchar();/*a  0x00C4F810&a[0] 0x00C4F810&a 0x00C4F810*/return 0;}



上面的注釋是我通過查看記憶體 和 彙編 的一些注釋,也保留下來了,可能每台機器不一樣,所以地址也不一樣。解釋說明:對指標進行加1 操作,得到的是下一個元素的地址,而不是原有地址值直接加1。所以,一個類型為T 的指標的移動,以sizeof(T) 為移動單位。因此,對上題來說,a 是一個一維數組,數組中有5 個元素; ptr * 是一個int 型的指標。


&a + 1: 取數組a 的首地址,該地址的值加上sizeof(a) 的值,即&a + 4*sizeof(int),也就是下一個數組的首地址,顯然當前指標已經越過了數組的界限。

(int *)(&a+1): 則是把上一步計算出來的地址,強制轉換為int * 類型,賦值給ptr1。

*(a+1): a,&a 的值是一樣的,但意思不一樣,a 是數組首元素的首地址,也就是a[0]的首地址,&a 是數組的首地址,a+1 是數組下一元素的首地址,即a[1]的首地址,&a+1 是下一個數組的首地址。所以輸出2*(ptr-1): 因為ptr 是指向a[4],並且ptr 是int * 類型,所以*(ptr-1) 是指向a[3] ,輸出4。printf("%x,%x,%x,%x,%x,%x",ptr1[-1],*ptr2,*ptr3,*ptr4,*ptr5);//下一篇文章講解( 指標數組,數組指標)相對稍有複雜,涉及到記憶體 和大小端,下次介紹!


c/c++(疑3) C語言指標與數組之間關係

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.