码迷,mamicode.com
首页 > 其他好文 > 详细

char*与char[]

时间:2015-07-18 19:50:44      阅读:109      评论:0      收藏:0      [点我收藏+]

标签:

 

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[]

 

char*与char[]

标签:

原文地址:http://www.cnblogs.com/Aspirin-Fight/p/4657355.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!