在以下代码中:
using namespace std;
void swap(char *x,char *y){
char tmp = *x;
*x = *y;
*y = tmp;
}
int main(){
char a[]="ab";
//char *a ="ab";
swap( (a+0),(a+1) );
cout<<a;
return 0;
}
当数组a初始化为a [] =“ ab”时,交换功能起作用, 但是当将其初始化为* a =“ ab”时,会引发分段错误, 谁能说为什么?
答案 0 :(得分:3)
char a[]="ab";
是本地非常量数组。您可以修改非常量数组。
字符串文字是常量。初始化指向字符串文字的指针时,它指向const对象。修改const对象的行为是不确定的。
即使初始化char *a ="ab";
也不正确(自C ++ 11起),因为字符串文字不会隐式转换为指向非常量char
的指针。
答案 1 :(得分:0)
这是纯C的概念,阅读C编程语言中的5.5字符指针和函数,您将知道答案。问题是您不能更改字符串常量。