指針數組和二維數組有沒有區別?比如這樣的兩個代碼。
int main() { char *s1[] = { "hello", "world", "total" }; char s2[][6] = { "hello", "world", "total" }; return 0; }
從后面的初始化方式可以看出,他們好像一樣,里面都保存了三個字符串。
想要搞清楚他們的區別,還得看下他們在內存中的排布。
首先是指針數組 s1。
s1 本身是個一維數組,數組有三個元素,每個元素都是個指針。如果是 64 位系統,三個指針就占了 24 個字節。
使用 sizeof 計算 s1 的大小,結果就是 24。
三個指針指向三個字符串,而且這三個字符串存放在只讀數據區,不能修改,嘗試通過指針 s1[0] 去修改元素 h,程序會異常。
s2 本身是個二維數組,三行六列,每一行都存放一個字符串。使用 sizeof 計算 s2 的大小,結果是 18。
在這個案例中 s2 是個局部變量,于是這三個字符串存放在棧空間,可讀可寫。通過 s2 可以隨意修改。
要說他倆的相同點,就是使用起來基本一樣,要想訪問字符串里面的元素,完全可以把 s1 當成二維數組,通過下標的形式去訪問。
-
指針
+關注
關注
1文章
480瀏覽量
70509 -
二維
+關注
關注
0文章
40瀏覽量
11978 -
數組
+關注
關注
1文章
415瀏覽量
25908
原文標題:指針數組和二維數組
文章出處:【微信號:學益得智能硬件,微信公眾號:學益得智能硬件】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論