如圖是解釋的int 型二級指標的圖,這個還能理解
不太理解字符型的二級指標
就是char這種的
比如
能拿char * a=“hello”
和 char *a[2]={"hello","good"}
這兩種情況說下嗎
他們對應的二級指標,什么時候取到的是單詞,什么時候取到的是單個字母?

uj5u.com熱心網友回復:
char * a時指向字串首地址的指標,a[i]取到的時第i個位置的一個字母(i從0開始)
char *a[2]是包含兩個元素的指標陣列,a[0]指向第一個字串首地址,a[1]指向第二個字串首地址,
uj5u.com熱心網友回復:
上面的圖,把int換成char就一摸一樣了,沒有區別char *a = “hello”; 系統在只讀記憶體分配了一塊地址長度為6, 內容是hello5個字符,外加字串結尾的0的字符,一共6個字符
而后把這個指標的地址給與了a。 你可以當作陣列的方式一個一個的訪問這些字符,也可以做為字串整體使用它
但是你不能改變這個字串的任何內容, 試圖改寫它就會程式錯誤甚至崩潰了
實際“hello”是const char *的型別, const 關鍵詞表示內容不可更改
char * a[2] = {"abc", "123"};
a是一個陣列, 陣列元素型別是 char*, 你不能把a簡單的理解成為char **
就如同不能簡單的把陣列理解為和指標一樣; 陣列名可以當指標來用,但是不等價于就是指標
陣列在定義的時候,就明確了資料的大小, 陣列名只是資料的首地址,這個地址是指標;但是整個資料區才是陣列。
回到這個char * a[2]的定義, a[0], a[1]都是char*型別, 分別指向初始化時候設定的那兩個字串;
char ** 正確的定義是這樣的
char * a = “abc”;
char ** pa = &a;
pa 是a的地址, 也就是一個char*型別變數的地址, 這個才是char**的準確定義, 這里和int**是完全一樣的
前面的char * a[2] = {....}
a實際上是一個 char(*)[2],是一個指向陣列的指標,并不是指向char*的指標,這才是準確的說法
這種定義下可以把a當作char**來使用的, 但是并不是真正的char**型別
就如同自然數是整數,但是整數不都是自然數一樣
uj5u.com熱心網友回復:
歸根到你,你還是沒有明白指標和陣列的區別仔細看看書,關于陣列的部分吧,那里都會有介紹
語言類的書看法和別的書不一樣, 你要把書上的事例代碼拋開, 把剩余的文字, 逐個細讀慢慢品味
代碼是拿來解釋那些文字, 核心都是在那些文字描述上
看那些文字就如同做數學應用題, 不去扣字眼兒, 很容掉入各種坑
uj5u.com熱心網友回復:
第一個a不就是第二個a的子集嗎?第一個a取字母a[0], a[1]等等
第二個a去字母a[0][0], a[0][1]
uj5u.com熱心網友回復:
那第二個有辦法取到字母嗎,看樣在加上*只能取到單詞吧?
uj5u.com熱心網友回復:
那第二個有辦法取到字母嗎,看樣在加上*只能取到單詞吧?
uj5u.com熱心網友回復:
*(a+1)[I]*((*(a+1)+i)
uj5u.com熱心網友回復:
知道了指標的型別,對應的加*加偏移或者用下標就可以啦uj5u.com熱心網友回復:
這兩個結果分別是什么請問?是一個意思嗎?
char *a[2]={"hello","good"}
*a[1] 是指的 good吧( 指標陣列,每個元素都是指標,a[1]指的good地址,加上* 就是good吧?】
那么*(a+1)[I] 是什么呢? a+1是干什么?
uj5u.com熱心網友回復:
瞎子點燈白費蠟
你不看我前面給你的答復,都是對你的上一個問題的答復
實在不明白, 你自己寫一行代碼
int I=2;
printf(“%c %c”, *(a+1)[I], *((*(a+1)+i));
自己看看輸出了什么
上一個問題你在問,有辦法取到字母嗎, 給你的那兩個就是取字母
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/137785.html
標籤:C語言
上一篇:單點最小二乘影像匹配
下一篇:高手來幫忙
