C++:无法使用类型为 'char**' 的右值初始化类型为 'char*[x]' 的变量

标签 c++ string pointers memory

<分区>

char str_arr[] = "ads";
char *str_ptr = str_arr;

char **ptr_str_ptr = &str_ptr;     // OK
char **ptr_str_arr = &str_arr;     // compile error: cannot initialize a variable of type 'char**' with a rvalue of type 'char*[4]'

我很困惑为什么我们无法获取str_arr 的地址。有什么想法吗?

最佳答案

可以得到str_arr的地址。但是,它将是数组的地址,而不是指针的地址。本质上,分配失败是因为类型不兼容。

这是一个例子,说明为什么不能将它分配给指向 char 的指针,因为这是可能的:

char **ptr_str_arr = &str_arr; // imagine this has worked
*ptr_str_arr = new char[10];   // This cannot be done to an array

由于类型不兼容,这甚至对 const 指针也不起作用。

char* const* ptr_const_str_arr = &str_arr; // Does not work either

Demo.

关于C++:无法使用类型为 'char**' 的右值初始化类型为 'char*[x]' 的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32299663/

相关文章:

c - C 中的结构数组,告诉我我的成员不在结构或 union 中

使用模板的 C++ 惰性求值

c++ - 使用指针c++的问题

c - 在 C 中将数字作为字符串相加

c++ - 字符串压缩和比较

c++ - 为什么要在函数指针或返回函数指针的函数编译之前放几十个*?

c - 内存是在函数结束时用 malloc 分配还是用 calloc 释放?

c++ - 为什么使用 switch-case 时会得到 `warning: control reaches end of non-void function`?

c++ - 如果输入了某些内容,我如何进行倒计时以每秒检查一次,而不会中断

c++ - 获取 Windows 上的 RAM 字节总数