c++动态数组是如何建立和使用的_如何优雅的使用C语言中的字符串 char型数组与char型指针...

6e0f07c631ce5b7c8f84324c11f963de.png

在C语言中有两种使用字符串的方式,用char型指针、用char型数组。那他们有什么区别和联系呢,下面来一起来说说:

C语言表示字符串的两种方式,如下:

e70d13f2895deb8b50df5324d23f6c90.png

首先,任何常量都将被放置到一个固定的内存区域,叫 .rodata 区,也叫常量区。因此上述代码中的 "abcde" 和 "uvxyz" 都被放置在这里面。

其次,s1 和 s2 都是普通变量,都被放置在栈内存中。

然后,s1 是一个指针,因此它的尺寸大小永远都是四字节(32位系统),而 s2 是一个数组,尺寸大小根据具体的内容来决定。

它们变量在内存中的关系如下图:

8d21a36addce711df8b0d60f18445627.png

对于 s1 而言,仅仅保留了一个地址0x123,该地址就是常量区中字符串 "abcde" 的地址。

对于 s2 而言,则保留了从常量区复制过来了字符串本身的内容 "uvxyz" ,从上图看到,此时 "uvxyz“ 实际上有两个副本。

那么在程序中如何使用这两种方式呢?答案很简单,如果仅仅是使用字符串,而不需要修改它,那就使用指针就行了,但是如果涉及需要对字符串内容的修改,那么就需要使用数组。

c495fedcecc406abc0d27f4d1f307d83.png

上述代码中,第一行试图将 "ABCDE" 塞到常量区,显然是不可行的。而第二行则试图将 "UVXYZ" 塞入栈中的数组,这是可行的。

char型数组和char型指针是有本质上的区别的,大家千万不要搞混。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值