C++指標數組、數組指標、數組名及二維數組技巧匯總_C 語言

來源:互聯網
上載者:User

本文較為詳細的分析了關於理解C++指標數組,數組指標,數組名,二維數組的一些技巧。是比較重要的概念,相信對於大家的C++程式設計有一定的協助作用。

一、關於數組名

假設有數組:

int a[3] = {1, 2, 3}

1.數組名代表數組第一個元素的地址,注意,不是數組地址(雖然值相等),是數組第一個元素地址,a 等同於 &a[0];

a+1是第二個元素的地址。比第一個元素地址a(或者&a[0])超出了一個整型指標的大小,在這裡是4個位元組(byte)

cout << a << endl;//會輸出數組第一個元素地址。

2.取址符號&.

&a是數組的地址,注意是數組的地址,表示數組這個整體的地址。不是數組第一個元素的地址(雖然他們的值相同)

&a+1比數組的地址&a超出了一個數組的地址大小,在這裡是3*4個位元組

int * p = &a;這條語句是不成立的。左邊指標變數p時指向整型的指標,而右邊是數組(類型是數組)的地址,不是數組元素(類型是整型)的地址,所以不能賦值。
應該賦值給數組指標(下面會講到)。

關於數組名,切記以上兩點。

二、關於指標數組

1.定義

指標數組,就是存放指標的數組,數組裡的元素是指標(對比於整型數組,整型數組就是存放整型的數組,數組裡的元素是整型)

int *ptr[3];如何理解?按照運算子優先順序,[]優先順序較大,所以ptr先與[3]結合,表示ptr是一個數組,必然要明確數組的元素類型,所以數組裡的元素類型是整型指標(int*),數組的大小不一定需要(定義數組時可以根據初始化的元素個數確定)

ptr[0]就是數組的第零個元素,它是一個整型指標。

樣本如下:

int a[3] = {1, 2, 3};int x = 5;ptr[0] = &x;ptr[1] = &a[2];

2.如何使用?

像一般指標一樣使用。*ptr[0]就是第零個元素(一個指標)所指向元素的值,這裡是 5。

三、關於數組指標

1.定義

數組指標,就是指向數組的指標,它是一個指標,指向一個數組(對比於整型指標,就是指向整型的指標,它是一個指標,指向一個整型)

int (*ptr)[3]; 如何理解?先看小括弧裡面,*ptr說明ptr是一個指標,然後跟[]結合表明這個指標指向一個數組,數組的元素是int

int a[3] = {1, 2, 3};int(*ptr)[3] = a;//這條語句不成立。

右邊a是數組名,還記得上面說的嗎,數組名代表數組第一個元素的地址,就是&a[0],數組名的類型相當於整型指標(不知道事實上是不是)int *,因為它指向了第一個元素,第一個元素是int

左邊ptr的類型是int(*)[],是數組指標,指向數組的指標,不是指向整型的指標,不能賦值。

int a[3] = {1, 2, 3};int (*ptr)[3] = &a;//正確。

因為a是一個數組,&a就是數組的地址,還記得上面說的嗎?

2.如何使用?

int a[3] = {1, 2, 3};int (*ptr)[3] = &a;cout << (*ptr)[0] << endl;  //輸出1cout << (*ptr)[1] << endl;  //輸出2

這裡有一點難以理解。不防對比一下一下代碼。

int a[3] = {1, 2, 3};int x = 5;int * p = &x;cout << *p << endl;  //輸出5

p是一個指向整型的指標,*p就是所指向的變數(整型x)的值。同理ptr是指向數組的指標,*ptr就是所指向的變數(數組a)的值。(*ptr)[0]就是數組的第零個元素。

四、關於二維數組

1.二維數組是一個數組,它的元素是一維數組。謹記這一點,然後把上面的套進來就行了。

int a[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};

數組名

a是數組第一個(或者說第零個更好)元素的地址,第一個元素是一維數組,a[0] ------> {1, 2, 3}。a+1是第二個元素的地址,就是第二個一維數組的地址,超出了3*4個位元組

&a是數組的地址,&a+1 就是超出了一個二維數組的大小,超出了3 * 4 * 3 個位元組。

數組指標

int (*ptr)[3] = a; //正確。

因為a表示第一個元素的地址,第一個元素是一個一維數組,所以a表示一個一維數組的地址,一個數組的地址賦值給數組指標,成立。

五、總結:

1.數組名表示數組的第一個元素的地址。

2.&a(a是一個數組)是數組的地址。

3.指標數組是一個數組,它的元素是指標。

4.數組指標是一個指標,它指向一個數組。

5.二維數組的元素是一維數組。

聯繫我們

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