为什么将指针重新分配给 1D 数组的 char 时显示错误,但 2D 数组工作正常?

why when re-assigning pointer to char for 1D array shows error but 2D array works fine?

本文关键字:数组 错误 显示 2D 工作 char 新分配 指针 分配 为什么 1D      更新时间:2023-10-16

看到这个问题,我对一维和二维数组完全感到困惑。

Example:

char *ar[3] = { 'a', 'b' };
ar[1] = 'f';     // shows error that i could not assign
char *games[3] = {
"roadrash",
"nfs",
"angrybirds"
};
games[0] = "hitman";   // works fine

代码中没有二维数组。 它是指向char*的指针的一维数组。

该代码的所有行都是错误的

char *ar[3] = { 'a', 'b' };

char*const char不是兼容的类型。如果您打算声明一个 3 个字符的数组,它将是

char ar[3] = { 'a', 'b' };
ar[1] = 'f';   // ar is now "af"

不能使用字符串文本初始化非常量char*char处指针的数组games

char *games[3] = {

应该是

const char *games[3] = {

是正确的。如果 pointee 的类型不是const char,则初始化和后续赋值

games[0] = "hitman";

不正确,因为不能将字符串分配给char处的指针,而只能将字符串分配给const char处的指针。字符串文本表示常量缓冲区,在这种情况下,它是更改值并指向编译器预分配的不同字符串的指针。如果你需要可变字符串,你需要分配一个足够大的缓冲区来将字符串复制到其中,例如

char *  games[3];
const char*  hitman = "hitman";
games[0] = new char[strlen(hitman)+1];
strcpy(games[0], hitman);

坦率地说,如果我们谈论标准C++,这是一个废话代码。强烈建议使用标准字符串组件来操作字符串。

// #include <string> assumed
// does all allocation inside of constructor
std::string  games[3] = {
"roadrash",
"nfs",
"angrybirds"
};
// reallocated and copies storage as per to operator=
games[0] = "hitman";