指针数组和二维数组有没有区别

描述

指针数组和二维数组有没有区别?比如这样的两个代码。

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 当成二维数组,通过下标的形式去访问。

 

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分