c – 无法从char * []转换为char **

c – 无法从char * []转换为char **,第1张

概述当我尝试只有这两行的测试程序时 char array[256];char** arrayPointer=&array; 我收到了错误 cannot convert from char*[256] to char**. 但如果我这样做: char array[256];char* temp=array;char** arrayPointer=&temp; 我没有这样的抱怨. 我认为这是ecli 当我尝试只有这两行的测试程序时

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

我收到了错误

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

但如果我这样做:

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

我没有这样的抱怨.

我认为这是eclipse表演的BUG(我的eclipase现在表现得很有趣),但是当我试图将&数组的演员阵容变成char **时,我最终得到了不寻常的行为,而我的调试器意味着数组没有被修改.

PS.所有这一切都是手写的,原谅错别字.

解决方法 在C中,数组和指针不是一回事.在许多情况下,数组可以隐式转换为指针,但数组类型和指针类型是不同的.

在你的情况下,变量

char array[256];

有char类型[256].如果你通过写&数组获取它的地址,你会得到一个指向256个字符数组的指针,它的类型为char(*)[256].这不是一个char **.这实际上是件好事.如果你可以进行转换,如果你这样做会发生什么?

char array[256];char** ptrPtr = &array; // Not legal!*ptrPtr = new char[256];

在这种情况下,第三行将“重新分配”数组以指向256个元素的新数组.但是,数组不是指针!这种 *** 作毫无意义.

你在编写时遇到奇怪的调试器错误的原因

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 *).在第三行中,您将创建指向该新指针的指针.如果你再写

*ptrPtr = new char[137];

然后没有坏事发生;你刚刚改变了ptr指向的位置,并没有销毁阵列.

希望这可以帮助!

总结

以上是内存溢出为你收集整理的c – 无法从char * []转换为char **全部内容,希望文章能够帮你解决c – 无法从char * []转换为char **所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1219663.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存