浅谈char* 与char[]的区别

来源:互联网 发布:淘宝宝贝没有展现词 编辑:程序博客网 时间:2024/05/20 01:39

很多C++程序员都会被char*与char[]所困惑,从表面上看char*是一个指向char的指针,char[]是一个char类型数组,而且它们都可以这样赋值:

char* a="12345";

char[10]  b="12345";

但实际上给a b分配的内存是完全不一样的,给a分配的内存是处于静态存储区的,而给b分配的内存是处于栈上的,我们知道静态存储区存储的都是常量,是不能被更改的。而栈存储的是变量,是可以被更改的。因此,


a[0]='2'; //error

b[0]='2';//OK


所以在用char*的时候要特别注意,是否它是用第一种方式定义的。


这就是两者最本质的区别,而在本人看来,为何把a的内存分配在静态存储区的原因是无法为a计算大小,而这也是为什么

sizeof(a)==1 而 sizeof(b)==10的原因。