二級(jí)指針初始化到底是怎么理解?
我們先來(lái)復(fù)習(xí)一級(jí)指針的定義和初始化 一級(jí)指針定義 int *p=地址x; 或者 int *p; p=地址x; 這兩種定義的結(jié)果都是 p=地址x 換句話說(shuō)也就是 *p=x 那二級(jí)指針定義首先說(shuō)一下不能定義 地址地址x 這種定義不合法的
但我們可以像這個(gè)圖一樣 讓p=地址x 這樣地址p就是地址x的地址 那么問(wèn)題來(lái)了 int **p=&q //也就類(lèi)似于 int **p=&&x; 這句話該如何理解? 有兩種理解方式 1按照一級(jí)指針解引用理解 (×) 也就是int *(*p)=&(&x); 那么其實(shí)就是 *p=&&x 那么***p才能代表x 2第二種理解(?) 因?yàn)橐患?jí)指針 int *p=&x;//也就是說(shuō)p=&x的意思也就是 *p=x 那么二級(jí)指針 int *q=&x int**p=&q //也就好比 int**p=&&x 那么也就是** p=x的意思 到底哪個(gè)理解對(duì)呢?
我們通過(guò)這個(gè)程序來(lái)分析
這個(gè)程序**p能夠輸出1 但是按照第一種理解需要***p才行 所以第一種理解是錯(cuò)的第二種理解對(duì)了 OK我們下面來(lái)看一個(gè)例子
這題答案是 7 7 7 3 7 7 我們來(lái)分析為什么是這個(gè)答案
從這個(gè)圖可以看到有幾次調(diào)用需要解幾次引用 也就是幾個(gè)* 補(bǔ)充
第一個(gè)圖程序報(bào)錯(cuò) 第二個(gè)圖成功運(yùn)行這是什么原因 其實(shí)這兩個(gè)程序都是語(yǔ)句合法的主要是這個(gè)版本的原因 這個(gè)版本指針都在定義時(shí)候初始化 要么都是先定義再初始化 不能一個(gè)指針先定義再初始化 另一個(gè)在定義時(shí)候初始化