一、指向陣列的指標
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 如果想通過指標在被調函式中修改主調函式的變數,必須將主調函變數 務必確定該變數的型別,有時候可能變數本身...