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

联系:

在大多数表达式中,使用数组类型的对象其实是使用一个指向该数组首元素的指针。
例如:作为函数的声明的参数的时候,char []是被当做char *来处理的!两种形参声明写法完全等效!

区别:

1、
char *指向的内存区域的大小可以随时改变。
char []对应着一块内存区域,其地址和容量在生命期里不会改变。

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

3、
char []可能存在没有结束符的情况

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、付费专栏及课程。

余额充值