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在内存中的区域)的内容是可变的。

你可能感兴趣的:(char*和char[]的联系和区别)