char *s1和char s2[]的区别
首先附上阿里在线笔试的一道题目:
对于下面的代码,说法正确的是____。
char* s1 = "Hello world";
char s2[] = "Hello world";
s1[2] = 'E'; // 1
s2[2] = 'E'; // 2
*(s1 + 2) = 'E'; // 3
*(s2 + 2) = 'E'; // 4
· 语句2、4是非法的
· 语句3、4是非法的
· 语句1、3是非法的
· 仅语句1是非法的
· 仅语句2是非法的
· 语句1~4都是合法的
上面的题我们选择第三项。
下面我们来详细分析一下。首先这两者有很大区别。 char *s1="Hello world"这个是一个字符串常量,你可以像一个字符数组一样使用它,但是你不能更改这个字符串的值,比如 s1[2]='E'这样不合法。 char s2[]="Hello world";是一个字符串变量,可以被修改,s2 是函数的栈空间区域,函数执行完成,这个空间就没了。
然而,这两者在作函数的形参的时候是完全等价的。
void function(char *s1); void function(char s1[]); 可以相当绝对的说这两种完全等价,没有任何区别。
版权声明:本文为博主原创文章,未经博主允许不得转载。
posted on 2015-04-05 21:01 Tob__yuhong 阅读(314) 评论(0) 编辑 收藏 举报