char*与char[]

 

char *s1="hello";   // 指向常量区

char s2[]="hello";   // 指向数组的内存空间

char *s1 的s1是指针,指针是指向一块内存区域,它指向的内存区域的大小可以随时改变,而且当指针指向常量字符串时,它的内容是不可以被修改的,否则在运行时会报错。
char s2[]的s2 是数组对应着一块内存区域,其地址和容量在生命期里不会改变,只有数组的内容可以改变。


char s2[] = "hello";”是在栈中申请了额外的空间保存"hello",也就是说,现在有2个"hello"字符串,分别保存在栈中和常量存储区。


s1=s2;   // ok

s2=s1   // error

 

同样在使用strcpy时 strcpy(s2,s1)是可以通过的,而由于s1是t指向字符常量不能修改,strcpy(s1,s2)是不能通过的。

 

 

在char*s1=s2 时,编译器自动转换成 char*s1=&s2,两式等同。

 

 

 

给双指针赋值二者区别

 

char*s1="Hello";
char s2[]="world";
char **s3=&s1;

//char **s4=s2;   ERROR

char *s4=s2;
char **s5=&s4;
cout<<*s3<<" "<<*s5;

输出“ Hello World”,char[]要经过两步赋值。

在函数中返回 char* 和 char[]的区别:

返回char*指向常量区,函数结束后可继续存在。

char[],栈中函数结束回收,返回乱码,要返回可在函数内用 static 声明char[]

 

posted @ 2015-07-18 18:35  Aspirin_J  阅读(169)  评论(0编辑  收藏  举报