?????????二級指針的使用是一個非常不易的問題,主要還是用的少了,如果經常使用到他,就會很明顯的感受到其具體使用方法。
char *a[10]={"as","bc","ssasd","asd"};
char **p=a;
?則 p,*p,**p的含義:
????????在給定代碼中,定義了一個字符指針數組 a
,并初始化了其中的元素。然后定義了一個字符指針指針 p
,并將其指向了數組 a
。
p
:這是一個字符指針指針,指向字符指針數組a
的第一個元素的地址,即a[0]
。因此,p
指向字符串 "as"。*p
:通過對p
進行解引用,你獲得了p
指向的地址處的值,即a[0]
,也就是字符串 "as"。**p
:這是一個字符指針的指針,通過對*p
進行解引用,你獲得了*p
指向的地址處的值,即a[0]
,然后再對其進行解引用,你獲得了字符串 "as" 的第一個字符 'a'。
????????所以,p
指向字符串 "as",*p
也指向字符串 "as",而 **p
是字符串 "as" 的第一個字符 'a'。
????????但是 p的偏移量為指針數組內的一個指針量(8位)(64位編譯器), *p的偏移量就只有一個字節(對比的是如下的操作,具體*p偏移量看數據類型)。
/*===============================================
* 文件名稱:Func_Wordstr.c
* 創 建 者:WM
* 創建日期:2023年08月14日
* 描 述:一堆字符串中求純字母字符串
================================================*/
#include <stdio.h>
int Func_word(char **);int main(int argc, char *argv[])
{ char *arr [10]={"ashdjas","as./.d","sasd[]","wor ld","[]hello","as"};printf("%d\n",Func_word(arr));return 0;
}
int Func_word(char **str)
{int i=0;while (*str!=NULL){while(**str){if ((('a'<=**str&&**str<='z')||('A'<=**str&&**str<='Z'))){if(*(*str+1)=='\0'){i++;break;}}else{break;}(*str)++; //指向內層的數據的指針開始偏移一個字節的單位。 } str++;//這個是指向數組內指針的指針開始偏移,偏移一個地址位。}return i;
}