[英]array of char and pointer to char in c++
以下两个程序确实使我感到困惑。 在第一个程序中,我使用const char*
然后可以重新分配字符串。 在第二个示例中,我使用了const char[]
,现在不再可以重新分配字符串。 有人可以解释为什么吗?
#include <iostream>
using namespace std;
const char* x {"one"};
void callthis(const char t[]);
int main()
{
callthis("two");
return 0;
}
void callthis(const char t[]){
t=x; // OK
// OR
// x=t; // OK
}
第二:
#include <iostream>
using namespace std;
const char x[] {"three"};
void callthis(const char* t);
int main(){
callthis("four");
return 0;
}
void callthis(const char* t){
x=t; // error: assignment of read-only variable 'x';
// error : incompatible types in assignment of
// 'const char*' to 'const char [6]'
}
数组不是指针。 让我们再次介绍一下: 数组不是指针
不能将数组分配给它。 一旦声明了当时尚未初始化的,设置数组值的唯一方法就是迭代每个元素并设置其内容。 如果我们使用,数组上的const
是一个红色的听力
char x[] {"three"};
//...
void callthis(const char* t){
x=t;
}
我们仍然会收到类似的错误:
错误:数组类型'char [6]'无法分配
第一个示例起作用的原因是可以分配指针,而const char *
不是常量指针,而是指向常量char
的指针。 由于指针不是const
,因此where可以更改指针指向的内容。 如果您要使用
const char * const x {"one"};
然后,您收到了以下错误:
错误:无法分配给常量限定类型为'const char * const'的变量'x'
我还注意到您正在using namespace std;
在您的代码中。 在小例子中,它并没有真正伤害任何东西,但是您应该养成不使用它的习惯。 有关为什么的更多信息,请参见: 为什么在C ++中“使用命名空间std”被认为是不良做法?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.