5 回答

TA貢獻(xiàn)1757條經(jīng)驗(yàn) 獲得超7個(gè)贊
**p :二級指針,表示p所指向的地址里面存放的是一個(gè)指向類型的指針。
*p:一級指針,表示p所指向的地址里面存放的是一個(gè)類型的值。
擴(kuò)展資料:
指針變量可以進(jìn)行加減運(yùn)算,例如p++、p+i、p-=i。指針變量的加減運(yùn)算并不是簡單的加上或減去一個(gè)整數(shù),而是跟指針指向的數(shù)據(jù)類型有關(guān)。
給指針變量賦值時(shí),要將一份數(shù)據(jù)的地址賦給它,不能直接賦給一個(gè)整數(shù),例如int *p = 1000;是沒有意義的,使用過程中一般會導(dǎo)致程序崩潰。
使用指針變量之前一定要初始化,否則就不能確定指針指向哪里,如果它指向的內(nèi)存沒有使用權(quán)限,程序就崩潰了。對于暫時(shí)沒有指向的指針,建議賦值NULL。
兩個(gè)指針變量可以相減。如果兩個(gè)指針變量指向同一個(gè)數(shù)組中的某個(gè)元素,那么相減的結(jié)果就是兩個(gè)指針之間相差的元素個(gè)數(shù)。
數(shù)組也是有類型的,數(shù)組名的本意是表示一組類型相同的數(shù)據(jù)。在定義數(shù)組時(shí),或者和 sizeof、& 運(yùn)算符一起使用時(shí)數(shù)組名才表示整個(gè)數(shù)組,表達(dá)式中的數(shù)組名會被轉(zhuǎn)換為一個(gè)指向數(shù)組的指針。

TA貢獻(xiàn)1827條經(jīng)驗(yàn) 獲得超8個(gè)贊
**p表示p也表示地址,簡單的說,這個(gè)地址對應(yīng)的存儲單元存儲的數(shù)也是一個(gè)地址,而不是數(shù)值,而這個(gè)被存儲的地址對應(yīng)的存儲單元存儲的數(shù)據(jù)才是真正的相應(yīng)類型的數(shù)值!
例如:
int i=10; //定義了一個(gè)整型變量
int *p=&i; //定義了一個(gè)指針指向這個(gè)變量
int **p1=&p; //定義了一個(gè)二級指針指向p指針
那么取出10的值方式為:
printf(“i=[%d]\n”,*p);
printf(“i=[%d]\n”,**p1);
擴(kuò)展資料:
指針與數(shù)組關(guān)系
指針數(shù)組:就是一個(gè)由指針組成的數(shù)組,那個(gè)數(shù)組的各個(gè)元素都是指針,指向某個(gè)內(nèi)存地址?!har *p[10];//p是一個(gè)指針數(shù)組
數(shù)組指針:數(shù)組名本身就是一個(gè)指針,指向數(shù)組的首地址。注意這是一個(gè)常數(shù)。
example:
char (*p)[10]//p是一個(gè)數(shù)組指針
函數(shù)指針:本身是一個(gè)指針,指向一個(gè)函數(shù)入口地址,通過該指針可調(diào)用其指向的函數(shù),使用函數(shù)指針可實(shí)現(xiàn)回調(diào)函數(shù)。

TA貢獻(xiàn)1789條經(jīng)驗(yàn) 獲得超10個(gè)贊
char p表示p的類型是字符。
char *p表示p的類型是字符指針,指向字符類型的變量。
char **p表示p的類型是字符指針的指針,指向字符指針的變量。

TA貢獻(xiàn)1809條經(jīng)驗(yàn) 獲得超8個(gè)贊
例如 int **p ;
解釋:
int *p;則p是一個(gè)指向int型的變量的地址, p是地址;
*p指的是內(nèi)容
而int **p;p指的是一個(gè)地址,p放的是*p的地址, *p指的是存放int 的地址.
- 5 回答
- 0 關(guān)注
- 2946 瀏覽
添加回答
舉報(bào)