无法从字符*[]转换为字符**
Can't convert from char*[] to char**
当我只用这两行尝试测试程序时
char array[256];
char** arrayPointer=&array;
我收到错误
无法从字符*[256]转换为字符**。
然而,如果我这样做:
char array[256];
char* temp=array;
char** arrayPointer=&temp;
我没有得到这样的抱怨。
我认为这是日食表演错误(我的日食现在表现得很有趣),但是当我尝试为函数char**
&array
进行强制转换时,我最终出现了异常行为和我的调试器暗示数组没有被修改为应有的方式。
所有这些都是手写的,请原谅错别字。
在C++中,数组和指针不是一回事。 在许多情况下,数组可以隐式转换为指针,但数组类型和指针类型是不同的。
在您的情况下,变量
char array[256];
具有类型 char[256]
。 如果通过写入 &array
来获取其地址,则会得到一个指向 256 char
s 的数组的指针,该数组的类型为 char (*)[256]
。 这与char**
不同. 这其实是一件好事。 如果您可以进行转换,那么这样做会发生什么?
char array[256];
char** ptrPtr = &array; // Not legal!
*ptrPtr = new char[256];
在这种情况下,第三行将"重新分配"array
指向一个包含 256 个元素的新数组。 但是,array
不是指针! 此操作毫无意义。
编写时遇到奇怪的调试器错误的原因
char array[256];
char** ptrPtr = (char**) &array; // Legal, but Bad Times!
*ptrPtr = new char[256];
是你放入的转换导致未定义的行为。 您假装指向包含 256 个实际char
对象的数组的指针实际上是指向char
的指针。 这是一个毫无意义的演员阵容,所以当你这样做时,所有的赌注都消失了。
另一方面,如果您显式引入如下所示的char*
变量:
char array[256];
char* ptr = array;
char** ptrPtr = &ptr;
然后一切都很好。 在第二行中,创建一个指针(实际类型 char*
),该指针指向 array
的第一个元素。 在第三行中,创建指向该新指针的指针。 如果你然后写
*ptrPtr = new char[137];
然后就没有什么不好的事情发生了;你只是改变了ptr
指向的地方,并没有破坏array
。
希望这有帮助!
相关文章:
- 从矢量<无符号字符>转换为字符* 包括垃圾数据
- 尝试将字符串/字符转换为整数会产生意外结果
- 如何使用C++将字符串中的字符转换为整数变量
- 字符转换功能 std::isupper() & std::islower() C++17
- 将字符 * 转换为字符串 *
- 在编译时将常量字符* 转换为常量 char_type*
- 如何在 C/C++ 中将无符号字符*转换为无符号字符数组?
- 错误:请求从"常量字符 [5]"转换为非标量类型"字符串"
- 无法使用字符串流将字符转换为字符串C++
- 将无符号字符 C++ 转换为 C#
- C++:使用没有位移位的指针将无符号字符转换为无符号 int
- 为什么我可以隐式地将字符*转换为常量字符*,但不能将无符号字符*
- 无法<string>从"常量字符 []"转换为<类名>
- 不能将字符转换为整数吗?
- 编译时将字符*转换为字节
- CP1251:从字符* 转换为 wchar_t* 时的编码失真
- 将单个字符转换为 std::string 前缀 \x01
- PPM 将字符转换为 int 授予负数
- 通过像printf这样的可变参数函数传递一个带有常量字符*转换函数的类
- 将常量字符* 转换为字符时出错