【问题标题】:array of char and pointer to char in c++c++中的char数组和指向char的指针
【发布时间】:2016-03-22 15:40:33
【问题描述】:

以下两个程序真的让我很困惑。在第一个程序中,我使用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]'
}

【问题讨论】:

    标签: c++ arrays pointers char


    【解决方案1】:

    数组不是指针。让我们再说一遍:数组不是指针

    无法分配数组。一旦声明了,如果当时没有初始化,设置数组值的唯一方法是迭代每个元素并设置其内容。阵列上的const 是一个红色的听证会,如果我们要使用

    char x[] {"three"};
    //...
    void callthis(const char* t){
        x=t;
    }
    

    我们仍然会收到如下错误:

    错误:数组类型“char [6]”不可赋值

    第一个示例有效的原因是可以分配指针,而const char * 不是常量指针,而是指向常量char 的指针。由于指针不是const,因此可以更改指针指向的内容。如果你要使用

    const char * const x {"one"};
    

    那么你收到了一个错误

    错误:无法分配给具有 const 限定类型“const char *const”的变量“x”

    我还注意到您在代码中使用了using namespace std;。在小例子中,它并没有真正伤害任何东西,但你应该养成不使用它的习惯。有关原因的更多信息,请参阅:Why is “using namespace std” in C++ considered bad practice?

    【讨论】:

      猜你喜欢
      • 2021-01-26
      • 2012-03-19
      • 1970-01-01
      • 2018-04-05
      • 2021-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-03
      相关资源
      最近更新 更多