指针数组和二维数组有没有区别?比如这样的两个代码。
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浏览量
70560 -
二维
+关注
关注
0文章
40浏览量
11984 -
数组
+关注
关注
1文章
417浏览量
25943
原文标题:指针数组和二维数组
文章出处:【微信号:学益得智能硬件,微信公众号:学益得智能硬件】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
评论