前言
在C語(yǔ)言中,指針是非常重要的概念。指針是一個(gè)變量,其值為另一個(gè)變量的地址。使用指針可以直接訪問(wèn)內(nèi)存中的數(shù)據(jù),這使得C語(yǔ)言非常靈活和強(qiáng)大。在學(xué)習(xí)C語(yǔ)言時(shí)相比大家都已經(jīng)知道了&和*的區(qū)別了,但你知道*&p和&*p又代表什么嗎?
寫(xiě)個(gè)測(cè)試程序
下面是一個(gè)簡(jiǎn)單的C語(yǔ)言代碼,可以用來(lái)演示上面提到的幾個(gè)標(biāo)識(shí)符,讓我們更好的理解幾個(gè)標(biāo)識(shí)符的意義:
#includeintmain(){ inta=10; int*p=&a; int**pp=&p; printf("a=%d ",a);//打印a的值 printf("&a=%p ",&a);//打印a的地址 printf("p=%p ",p);//打印p的值,即a的地址 printf("*p=%d ",*p);//打印p所指向的變量的值,即a的值 printf("&p=%p ",&p);//打印p的地址 printf("*pp=%p ",*pp);//打印pp所指向的指針變量p的值,即a的地址 printf("**pp=%d ",**pp);//打印pp所指向的指針變量p所指向的變量的值,即a的值 printf("&pp=%p ",&pp);//打印pp的地址 printf("*&p=%p ",*&p);//打印p的值,即a的地址 printf("&*p=%p ",&*p);//打印p的地址 return0; }
下面,我們來(lái)運(yùn)行一下這個(gè)程序,看看輸出結(jié)果:
a=10 &a=0x7fff87a4ce94 p=0x7fff87a4ce94 *p=10 &p=0x7fff87a4ce98 *pp=0x7fff87a4ce94 **pp=10 &pp=0x7fff87a4cea0 *&p=0x7fff87a4ce94 &*p=0x7fff87a4ce94
這個(gè)程序定義了一個(gè)整型變量a,一個(gè)指向整型變量的指針p,一個(gè)指向指針變量p的指針pp。程序輸出了上面提到的幾個(gè)標(biāo)識(shí)符所代表的值或地址。運(yùn)行這個(gè)程序,可以看到它的輸出結(jié)果,從而更好地理解這些標(biāo)識(shí)符的含義。
從上面的運(yùn)行結(jié)果可以看出*p打印的是a的值,也就是p指向變量的值,這點(diǎn)是毋庸置疑的,想必大家也都知道,那我們一起來(lái)看看其他的變量分別代表什么意思吧!
p:指針變量名。在定義指針變量時(shí),需要指定指針?biāo)赶蜃兞康臄?shù)據(jù)類型。例如,int *p; 定義了一個(gè)指向int類型變量的指針變量p。
*p:解引用操作符。它用于訪問(wèn)指針?biāo)赶虻淖兞康闹怠@纾?p = 10; 將10賦值給p所指向的變量。
&p:取地址操作符。它用于獲取指針變量p的地址。例如,int *p; int **pp = &p;定義了一個(gè)指向指針變量p的指針變量pp。
*&p:這個(gè)操作符等價(jià)于p。它首先將p取地址,然后再將其解引用,得到p本身的值。
&*p:這個(gè)操作符等價(jià)于p。它首先將p解引用,得到p所指向的變量的值,然后再將其取地址,得到p本身的地址。
小結(jié)
a和*p輸出的,都是變量a的值。
&a和p輸出的,都是a的地址。
&*p和*&p其實(shí)都是p,也就是a的地址。
審核編輯:劉清
-
C語(yǔ)言
+關(guān)注
關(guān)注
180文章
7598瀏覽量
136207
原文標(biāo)題:C語(yǔ)言指針p、*p、&p、*&p、&*p符號(hào)分別代表什么意思?
文章出處:【微信號(hào):mcu168,微信公眾號(hào):硬件攻城獅】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論