下面這段**輸出什麼?
#include#includeint main()
; char **pa = a;
pa++;
printf("%sn", *pa);
system("pause");
return 0;
}
a是乙個陣列,這個陣列存的型別是 char * 型別,所以是這個樣子的。
pa 是乙個二級指標變數,這個指標變數的初始化位址的 a 的首元素的位址,所以pa的值和 &a[0]是一樣的。
pa 是乙個指標變數,pa 初始化的是 &a[0] ,也就是這個陣列的首位址。
感覺有人還不是很理解這個東西,pa 存在的是 a[0] 的位址,所以通過 * 這個鑰匙就可以拿到 pa裡面的東西,a[0] 裡面的東西是什麼型別的?看 a的定義我們可以知道,裡面存的是 char * 字串。
print("%sn",*pa);
應該輸出的是 「work」字串。
但是呢,題目裡面對 pa進行了自加運算,那 pa 存的位址就不是這個了。
這個 pa++ 我們應該如何去理解,或者它本來就應該進行什麼運算呢?
pa 是什麼?
pa 是乙個指標變數。
pa 的型別是什麼?
pa 的型別是 char ** 型別,就是二級指標變數,也就是他存的是指標變數的位址。
所以正常是這樣使用
* a是乙個別名,這個別名代表乙個位址,這個位址裡面存的是乙個字元 『p』
* p因為它的前面有乙個 * 所以 p是乙個指標變數,它存的是東西是位址,它存的這個位址裡面存的是乙個 char 。
* p1 因為它前面有乙個 * 所以 p1 是乙個指標變數,它存的是東西是位址,它存的這個位址裡面存的是乙個char *
* p2 因為它前面有乙個 * 所以 p2 是乙個指標變數,它存的是東西是位址,它存的這個位址裡面存的是乙個char * *
* p3 因為它前面有乙個 * 所以 p3 是乙個指標變數,它存的是東西是位址,它存的這個位址裡面存的是乙個char * * *
* p4 因為它前面有乙個 * 所以 p4 是乙個指標變數,它存的是東西是位址,它存的這個位址裡面存的是乙個char * * * *
* p5 因為它前面有乙個 * 所以 p5 是乙個指標變數,它存的是東西是位址,它存的這個位址裡面存的是乙個char * * * * *
我們分析下 char * * * * * 這個是什麼?
這個是乙個型別,也可以是說明屬性,在漢語裡面,可以理解為形容詞,形容詞後面如果沒有名詞,是沒有意義的。
就比如說 「我非常」,主謂賓,沒有後面的乙個詞來輔助,它沒有意義。
char * * * * * 也是一樣,它後面需要加乙個東西,應該是後面需要加乙個位址,指明這個位址是幹什麼的。
比如 char * * * * * pt
c 獲得字元陣列長度及字串長度
1.字串輸入總結 遇到空格結束 2 cin.get 用法1 cin.get 字元變數名 可以用來接收字元 include using namespace std main 請輸入第1個字串 kskr1 請輸入第2個字串 kskr2 請輸入第3個字串 kskr3 輸出m 0 的值 kskr1 輸出m ...
獲取C C 字串 字元陣列長度
在c c 中常用的獲取字串長度或者字串陣列長度的函式有 sizeof length strlen size 其中strlen str 和str.length 和str.size 都可以用來求字串的長度 str.length 和str.size 是用於求string類物件的成員函式 strlen st...
c 陣列求長度 字串長度
c 求長度的方法很侷限吧,我目前只知道 int a 10 int length sizeof a sizeof a 0 cout length 坑呀坑!寫二分查詢的時候,發現這樣乙個問題,把乙個陣列的位址傳入內部,然後求它的長度和外部的不一樣。直到我寫出下面的程式後就恍然大悟 include usi...