簡體   English   中英

為什么它不能將 char* 轉換為 char

[英]why it cannot convert char* to char

在 C++ 中,我們可以寫
1 個char *s="hello"

但以下程序行產生錯誤(無法將 char* 轉換為 char)
2個char *s; *s="hello"; char *s; *s="hello";

我在這里很困惑,為什么會出現此錯誤,1 和 2 之間有什么區別?

在 C++ 中,字符串文字是字符的常量數組,而不僅僅是像 C 中的字符數組。無論如何,要分配給這樣的變量(最好避免這種情況),您不必取消引用指針。 取消引用它會訪問第一個元素,它只是一個字符。 char 不能在其中包含字符數組,從而導致錯誤。 這更多是您應該使用std::string

一些編譯器(例如 GCC)提供了擴展以使此類代碼成為可能,因為它不是符合標准的代碼,它看起來像:

char* s = "hello";
s = "new string";

這會在GCC 中生成以下警告(但仍然得到預期的結果):

警告:ISO C++ 禁止將字符串常量轉換為 'char*' [-Wwrite-strings]

Clang也具有相同輸出的相同行為(同時生成警告)

字符串是一個字符數組。 因此,字符串的開頭const char * 因此,要引用字符串,可以使用const char * s = "hello";

但是,如果您取消引用const char* ,則會得到一個const char 這不是一個字符串,即*s給你 'h'。

在你的代碼中*s="hello"; ,你說的是“在被取消引用的地方分配值”你好“”。 取消引用 s 只是一個字符,您正在嘗試為其分配一個字符串。

問題是第二個示例中的第二個星號。

第一個代碼是這樣的

char *s="hello";

等效代碼是這樣的

char *s; 
s="hello";

第二行中的s前沒有*

現在每個人都指出這些都不是合法的 C++。 正確的代碼是

const char *s="hello";

或者

const char *s; 
s="hello";

因為字符串文字是常量,所以你需要一個指向const char的指針。

我在這里很困惑,為什么會出現此錯誤,1 和 2 之間有什么區別?

與 C++ 中的許多其他*在不同的上下文中意味着不同的東西一樣:

char *s; // * here means that s type is a pointer to char, not just char
*s;      // in this context * means dereference s, result of exression is char
int a = 5 * 2; // in this context * means multiply

因此案例 1 和案例 2 可能看起來與您相似,但它們的含義非常不同,因此會出現錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM