char 和 char[]的区别与联系

本文深入探讨了char*和char[]在C/C++中的区别与联系,包括它们的内存分配方式、读取速度、使用场景及底层实现原理。特别强调了char[]作为函数参数时被视为char*的特性,以及不同情况下它们对字符串操作的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

char* 和 char[]的区别与联系

  • 联系

    在大多数表达式中,使用数组类型的对象其实是使用一个指向该数组首元素的指针。

    例如:

    ​ 作为函数的声明的参数的时候,char []是被当做char *来处理的!两种形参声明写法完全等效!

  • 区别

    1. char *指向的内存区域的大小可以随时改变。

      char []对应着一块内存区域,其地址和容量在生命期里不会改变。

    2. char []存放在栈内存中,读取速度较快

    3. char []可能存在没有结束符的情况(详情见我的另一篇博文《字符数组结束符’0’的问题》)

    4. 对于char *a = “abcd” 此时"abcd"存放在常量区。通过指针只可以访问字符串常量,而不可以改变它。

      char a[20] = "abcd"此时 "abcd"存放在栈。可以通过指针去访问和修改数组内容 。

    5. 对于const char *a = “abcd” 可以理解为一个底层const。

      即:a是一个指针常量,a的值是可以改变的,可以指向另一个地址但指向的区域的内容不可改变 。

      char a[20] = “abcd” 可以理解为一个顶层const。

      即:a是一个常量指针,a的值不能变;但a指向的目标(数组a在内存中的区域)的内容是可变的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值