c語言中為什麼不能用char 指向字元陣列?

時間 2021-06-03 17:24:26

1樓:心不變情依舊

char**是二級指標,表示指標的指標,就是把不連續的空間連線起來,第乙個指標指向char*,而char*可以表示一階陣列。

2樓:喵NLI

因為char z不是指標,是直接存放於棧中的陣列,這種情況下r=z與r=&z都是獲取到z這個陣列的位址而不是二級指標

charz

="hello"

;char*y

=z;// 與char *y=&z;等價

char**r

=&y;

printf

("%d\n"

,**r);

這樣就沒問題了

原本的寫法會把hello的ascii碼當作指標位址去進行讀取,當然會記憶體錯誤

3樓:Gimel

實際上,你要先理解字元陣列在記憶體的儲存和取址方式。儲存方面略,取址方面,對於陣列採用相對定址,就是根據乙個絕對位址加偏移量來找到陣列中元素,通俗說就是首個元素是絕對位址,第幾個就是偏移。

陣列名相當於位址,可以用乙個指標直接指向陣列。例如char *point=num.其中num就是乙個字元陣列名,前面是不需要取位址符的。

通俗來說,乙個*相當於一維陣列。(兩者還是有區別的)

如果是在陣列前面加上&,實際上就是代表取整個陣列位址。這裡可以說明一下a和&a的區別。前者就是表示首元素位址,大小為乙個元素大小,後者是表示整個陣列位址,大小為整個陣列大小。

經過網友指出,回去又查了一下,發現確實如此,a是陣列大小,&a是位址大小,*a是指標大小。感謝各位大佬糾錯。*( )*

而對於二維陣列,就是相當於**了。(兩者存在區別)。可以通過乙個*也就是指向指標的指標找到指向具體資料的指標,通過兩個*就可以找到具體資料。同理,不需要加取位址符。

指標在這個方面和陣列有點相似,所以在傳參或者一些其他情況,我們通常可以把*理解為陣列,有幾個就是幾維,當然,也可以直接用陣列的方式就是加中括號去表示具體資料。

4樓:GsyPs

你應該大概能看出 *r 是乙個位址,這個位址其實就是 hello 的assic值,這塊區域不可訪問。

再往上,對陣列取位址其還是陣列的首位址。

在C語言中為什麼不能用 判斷a和5 2222的大小

五棍薩滿 JS著名的 0.1 0.2 0.3就是這個原因 計算機是二進位制的,在浮點型裡面1.5,就被表達成了00000001.10000000 為了簡便暫時使用8位 3.25就是00000011.01000000,而像是0.2,0.3這類無論乘上幾次2都不能變成整數的小數來講,計算機只能用最接近的...

為什麼C語言中的這個myputs函式不能執行?

引數型別不對 變數型別是按右左法則來看的,從變數名往右看,看完再往左看,如此往復 char str,str右邊是,說明str是陣列,再往左看,是 說明陣列元素是指標 也就是str是個存放char指標的陣列 然後函式裡的引數比較特殊,陣列會退化成指標 所以這麼寫的str就是個char 而已,和傳進去的...

c語言中 p a什麼意思?

Flint Stone 首先 C語言 其次這是乙個指標,指標是什麼?是控制位址的指標的常用運算子 先說後面那個,你學C語言,那麼你肯定用過scanf d n 這樣的輸入吧,n是輸入到n的位址,就是取位址符,你可以試試cout n endl 輸出是乙個位址,十六進製制的。你可以找一篇部落格好好看看。定...