新聞中心
C語(yǔ)言中指針的操作非常靈活,指針與數(shù)組的結(jié)合更是令初學(xué)者暈頭轉(zhuǎn)向,一級(jí)指針倒還可以,二級(jí)及其以上,也即是所謂的多級(jí)指針,就使得大部分初學(xué)者更混淆了,本篇文章重點(diǎn)為大家講解一下C語(yǔ)言中的多級(jí)指針。

為扶溝等地區(qū)用戶提供了全套網(wǎng)頁(yè)設(shè)計(jì)制作服務(wù),及扶溝網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作、扶溝網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠(chéng)的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!
假如定義了一個(gè)二級(jí)指針:
int **q;
q 的前面有兩個(gè)“*”,這個(gè)該如何理解呢?與一級(jí)指針的理解是一樣的。
int**q 可以把它分為兩部分看,即 int* 和 (*q),后面 (*q) 中的“*”表示 q 是一個(gè)指針變量,前面的 int* 表示指針變量 q 只能存放 int* 型變量的地址。對(duì)于二級(jí)指針甚至多級(jí)指針,我們都可以把它拆成兩部分。首先不管是多少級(jí)的指針變量,它都是一個(gè)指針變量,指針變量就是一個(gè)“*”,其余的“*”表示的是這個(gè)指針變量只能存放什么類型變量的地址。比如“int*a;”表示指針變量 a 只能存放 int 型變量的地址。
下面來(lái)舉一個(gè)例子。假如定義了一個(gè)指針變量 p 指向一個(gè) int 型變量:
int i = 10;int *p = &i;
前面講過(guò),指針變量的“基類型”用來(lái)指定該指針變量可以指向的變量的類型,即該指針變量只能存放什么類型變量的地址。所以 int*p 表示 p 指向的是 int 型變量,里面只能存放 int 型變量的地址。雖然 p 是指針變量,但只要是變量就有地址,就可以定義一個(gè)指針變量存放它:
int **q = &p;
為什么存放 &p 要兩個(gè)“”呢?因?yàn)橹羔樧兞?p 的基類型為 int 型,所以 &p 的基類型為 int型 。所以如果要定義一個(gè)能指向 int* 型變量的指針變量,有兩個(gè)要求:首先它要是指針變量,即一個(gè)“”;其次,該指針變量指向的是 int 型的數(shù)據(jù),或者說(shuō)存放的是 int* 型變量的地址,所以就是 int**。
以上就是為什么需要兩個(gè)“”的原因。兩個(gè)“”表示二級(jí)指針,就是指針的指針。二級(jí)指針需要兩個(gè)“*”才能指向最終的內(nèi)存單元,即 q==i。變量 q 中存放變量 *q 的地址,變量 *q 中存放變量 q 的地址,變量 q 中存放i的內(nèi)容,即 10?;蛘哒f(shuō):q 指向 *q,*q 指向 q,**q 中存放i的內(nèi)容,即 10。
同樣,雖然 q 存放的是指針變量 p 的地址,但它也有地址。所以也可以定義一個(gè)指針變量,里面存放 q 的地址:
int ***r = &q;
intr 就等價(jià)于 intr,所以 r 的基類型就是 int 型。而 q 的基類型是 int 型,所以 &q 的基類型是 int 型。所以 r 有三個(gè)“”才能指向 q 的地址。三個(gè)“”表示三級(jí)指針,即指針的指針的指針。三級(jí)指針需要三個(gè)“”才能指向最終的內(nèi)存單元,即 ***r==i。
下面來(lái)寫一個(gè)程序:
純文本復(fù)制
# include int main(void){ int i = 10; int *p = &i; int **q = &p; int ***r = &q; printf("i = %d\n", ***r); return 0;}輸出結(jié)果是:i = 10
這就是多級(jí)指針,也很簡(jiǎn)單,一定要弄清楚。
當(dāng)前名稱:C語(yǔ)言中的多級(jí)指針使用方法
分享網(wǎng)址:http://fisionsoft.com.cn/article/cohegpd.html


咨詢
建站咨詢
