簡體   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