【发布时间】:2021-04-10 09:02:29
【问题描述】:
当我声明和定义一个 char* 变量时,我总是想知道编译器的抱怨。
char* myChar = "Char";
编译器会抱怨它无法将 const char* 转换为 char*。它需要像
这样的显式转换char* myChar = (char*)"Char";
我的第一个问题是,这是否是用 const char* 初始化 char* 的正确方法。我的第二个问题是,为什么编译器需要这种显式转换。我认为 const char* 和 char* 除了 const 没有太大区别。
【问题讨论】:
-
const是的最大区别。指向某些非 const 限定类型的指针和指向 const 限定类型的指针是不同的、不相关的类型。 -
没有用
const char*初始化char*的“正确”方法。一个是指向可变数据的指针,另一个是指向不可变数据的指针。您可以将前者隐式转换为后者;您正在玩从后者到前者的强制转换,尤其是如果您“认为 const char* 和 char* 之间没有太大区别”。 -
试试这个:
char* myChar = (char*)"Char"; myChar[0] = 'x';kaboom! -
@rustryx 很好的例子。我认为 memcpy 可以避免这种情况。