c語言指標學習筆記(二)

2021-10-05 12:28:13 字數 2171 閱讀 8139

6.指標和多維陣列

就拿陣列int array[5]

[2]舉例

array 是乙個占用兩個int大小物件的位址

array[

0] 是乙個占用乙個int大小物件的位址

故此,可以理解給array+

1和array[0]

+1不同之處

畢竟,乙個代表著兩個int單位,乙個則代表著乙個

array是位址的位址,必須解引用兩次才能獲得原始值

int

(* pz)[2

]//pz指向乙個(內含兩個int型別值的)陣列

int* pax [2]

//pax是乙個(內含兩個指標元素的)陣列,每個元素都指向int的指標

因為的優先順序較高

而對於array來說,指標必須指向乙個內含兩個int型別值的陣列,而不是指向乙個int型別值

然後嘞,* pz=array就okk了

不得不說,c語言博大精深,下面特批上人話:

這個二維陣列呢,講究的是雙重解引,把這個pz指標設成了乙個含兩個int型別的陣列,就可以保證,在給pz+1或者+2的時候,這個pz都是兩個兩個地動(即,以主陣列為單位地動)

舉個栗子:

*(*

(pz+2)

+1)

那這次pz指標指向的是神馬東東呢??

原來是array陣列裡第三個主陣列裡的第二個元素~~

好的,那麼這點跨過去之後,再就指標相容性談談

7.指標的相容性

指標的賦值與數值型別確實要嚴格,比如,就不能把int型別的賦給double

int n=5;

double x;

int* pl=

&n;double

* pd=

&x;x=n;

//隱式型別轉換

pd=pl;

//編譯不通過

不僅如此,還有以下更複雜的栗子

int

* pt;

int(

*pa)[3

];int ar1[2]

[3];

int ar2[3]

[2];

int*

*p2 //乙個指向指標的指標

pt=&ar1[0]

[0];

//都是指向int的指標

pt=ar1[0]

;//都是指向int的指標

pt=ar1;

//無效

pa=ar1;

//都是指向內含3個int型別元素陣列的指標

pa=ar2;

//無效

p2=&pt;

//both pointer-to-int * ps:這一點呢,我還沒太搞懂,以後再談指向指標的指標

*p2=ar2[0]

;//都是指向int的指標

p2=ar2;

//無效 ps:p2是指向指標的指標。它指向的指標指向int,而ar2是陣列的指標,該陣列內含兩個int型別的元素,所以無效

雖然指標的指標還沒get到點,但是,這裡有個**就是按照這個亞子執行的

#include

int main ();

pt=zippo;

p2=&pt;

printf

("%d",*

*p2)

;return0;

}

輸出的結果是2

中間插乙個指標定義的**哈

#include

int main ();

int* pt=array;

printf

("%d"

,* pt)

;return0;

}

輸出結果是5

const

把const指標賦值給非const指標不安全,因為可以用新的指標改變const指標指向的資料

反過來還是ok的

但是,前提是只進行一級引用

所以還是秉承著指標相容性的法則,把**寫的更合理吧~~

這篇就寫到這裡吧,またね!

C語言指標學習 二

1.c語言中,實參變數與形參變數之間的資料傳遞,是單向的 值傳遞 方式。指標變數做函式引數也要遵循這一規則。呼叫函式不可能改變實參指標變數的值,但可以改變實參指標變數所指向變數的值。我們知道函式的呼叫可以得到乙個返回值,而運用指標變數做引數,可以得到多個變化了的變數值。2.在主調函式中宣告所要求的數...

c語言學習筆記(十四 指標二

1.指標的算術運算char a 20 int ptr int a 強制型別轉換並不會改變a 的型別 ptr 指標ptr 的值加上了sizeof int 由於位址是用位元組做單位的,故ptr 所指向的位址由原來的變數a 的位址向高位址方向增加了4 個位元組。2.和 這裡 是取位址運算子,是間接運算子。...

c語言指標學習筆記

example 1 int a,b,p,q p a p a p q b p p a 錯誤,因為p實際上是乙個位址,而a是乙個整型值 p q 錯誤,因為這句話的意思是 將位址q指向的單元的值賦給位址p。而實際上p是乙個位址,是不能存值得 p a 錯誤 注意,如果這樣定義了 p,那麼 p表示位址 指標 ...