指標知識梳理10 指向陣列的指標

2022-08-02 13:42:09 字數 1576 閱讀 6791

一、指向陣列的指標

2、乙個變數能夠佔多個位元組,我們通常所說某個 的位址指的是這塊記憶體的起始位址。比方int  a,變數a棧 0x10 0x11 0x12 0x13這四個位元組,那麼a的位址是0x10.

3、(1)曾經我們定義乙個陣列的時候,一般是把這個陣列當做同種型別的變數的集合來看的,即陣列的每乙個元素。使用方法為a[i].

(2)我們也能夠把陣列當做乙個總體來看。int  a[5],  a是個變數。這個變數的型別是陣列,這個變數佔40個位元組,。

依照變數定義基本模型 type  name ,假設陣列是這麼定義可能更好理解這個總體概念, int[10]   a,可是c語言語法不是這樣寫的。

(3) 得到乙個變數的位址 用&符號。那麼當把陣列a看做乙個變數的時候。它的位址為 &a.

假設要儲存 &a這個資料,須要對應的指標變數,即所謂指向陣列的指標。

定義方法例如以下  int (*p)[5]。事實上依照  type *p 這個模型來定義,int[5]  *p 這樣的寫法更好理解,僅僅只是c語言的爸爸在創造語法的時候不這麼規定。

那麼 p = &a;

對於 p 來說。p+i 位址偏移 i*sizeof(a)  

(4) 下面須要分清楚區分

對於 int a[5];

&a 與 &a[0] 的差別。這兩個得出來的位址 在數值上是相等的,可是他們的資料型別是不一樣的。

如上圖。我們分別把陣列當做集合和總體來看。

p1 儲存a[0]的位址 。也就是a[0]的起始位址。0x10.

p2 儲存a的位址,也就是陣列的事實上位址。也是a[0]的起始位址 0x10.

p1+1  結果為 0x14

p2+1  結果為 0x24

4、typedef 使用方法

typedef  int(type*)[5];

type 是種型別,是指向一維陣列的指標型別(說法比較拗口),下面寫法定義變數p1是等效的。

type  *p1;

int (*p1)[5];

5、在語法層面上使用

typedef  int(type*)[5];

int  a[5];

type p;

p = &a; //這裡陣列名就不代表的是a[0]的位址了。

那麼 *p 就是 a 了。

a[i] ---> (*p)[i];// 注意這裡優先順序

二、二維陣列的陣列名

int  a[2][3];

二維陣列能夠看成一維陣列。a[0]   a[1]是陣列的兩個元素,每乙個元素是 個一維陣列 (int[3]).

一維陣列的陣列名能夠代表第乙個元素的位址,第乙個元素是個int[3]型的陣列。

typedef  int(*p)[3];

int a[2][3];

p = a;

p = &a[0];

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

}

指標知識梳理10 指向陣列的指標

一 指向陣列的指標 2 乙個變數能夠佔多個位元組,我們通常所說某個 的位址指的是這塊記憶體的起始位址。比方int a,變數a棧 0x10 0x11 0x12 0x13這四個位元組,那麼a的位址是0x10.3 1 曾經我們定義乙個陣列的時候,一般是把這個陣列當做同種型別的變數的集合來看的,即陣列的每乙...

C 指標2 指向陣列的指標和指標陣列

7.4指向陣列元素的指標 宣告與賦值 例 int a 10 pa pa a 0 或 pa a p1 通過指標引用陣列元素,經過上述宣告及賦值後 pa就是a 0 pa 1 就是a 1 pa i 就是a i a i pa i a i pa i 都是等效的。不能寫 a 不能給陣列名賦值或者試圖改變其值,因...

指標和引用(4)指向指標的指標

1 在程式中可以宣告指向任何資料型別的指標,指標也可以指向指標型別,成為指向指標的指標。下面是乙個使用例子 1 int a 10,b 20 2 int q a 3int p q 4 p 30 2 如果想通過指標在被調函式中修改主調函式的變數,必須將主調函變數 務必確定該變數的型別,有時候可能變數本身...