繁体   English   中英

char数组和c中的char指针

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM