gpt4 book ai didi

c++ - 无法从 char*[] 转换为 char**

转载 作者:太空狗 更新时间:2023-10-29 19:46:31 28 4
gpt4 key购买 nike

当我尝试只用这两行的测试程序时

char array[256];
char** arrayPointer=&array;

我得到了错误

cannot convert from char*[256] to char**.

但是如果我这样做:

char array[256];
char* temp=array;
char** arrayPointer=&temp;

我没有收到这样的投诉。

我认为这是 eclipse 行为错误(我的 eclipase 现在表现得很有趣)但是当我尝试将 &array 转换为 char**对于该函数,我以异常行为结束,我的调试器暗示数组没有按应有的方式修改。

附言。所有这些都是手写的,请原谅错别字。

最佳答案

在 C++ 中,数组和指针是一回事。数组在很多情况下可以隐式转换为指针,但数组类型和指针类型是不同的。

在你的例子中,变量

char array[256];

类型为 char[256]。如果您通过编写 &array 获取它的地址,您将获得一个指向 256 个 char 的数组的指针,该数组的类型为 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 的指针。这是一个毫无意义的 Actor ,所以当你这样做时,所有的赌注都会消失。

另一方面,如果您像这样显式引入一个 char* 变量:

char array[256];
char* ptr = array;
char** ptrPtr = &ptr;

然后一切都很好。在第二行中,您创建了一个指向 array 的第一个元素的指针(实际类型 char*)。在第三行中,您创建了一个指向该新指针的指针。如果你再写

*ptrPtr = new char[137];

然后没有什么不好的事情发生;你只是改变了 ptr 指向的位置,并没有破坏 array

希望这对您有所帮助!

关于c++ - 无法从 char*[] 转换为 char**,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11146662/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com