能否用void** 指针作为参数, 使函数按引用接受一般指针?

qihui_zhu 2008-03-03 04:14:37
能否用void** 指针作为参数, 使函数按引用接受一般指针?

答:不可移植。C 中没有一般的指针的指针类型。void* 可以用作一般指针只是
因为当它和其它类型相互赋值的时候, 如果需要, 它可以自动转换成其它类型; 但
是, 如果试图这样转换所指类型为void* 之外的类型的void** 指针时, 这个转换不
能完成。


=================================================================================
对此问题我不太理解,主要是没懂这个问题说的是个情况?能否麻烦举个例子。
对于回答中,红色字体之前的部分我还是理解的,可是红色字体说的是个什么情况我就不知道了,也请麻烦举个例子说明一下。谢谢!!
...全文
173 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
qihui_zhu 2008-03-03
  • 打赏
  • 举报
回复
书的来头好像还不小。我觉得是翻译的真是烂,可惜我手里没有原版。
p0303230 2008-03-03
  • 打赏
  • 举报
回复
那就不知道
linux 牛
sheenl 2008-03-03
  • 打赏
  • 举报
回复
顺便问一句,怎么手工贴成代码格式? 我在linux里面, firefox点那个贴代码的快捷按钮, 点了之后毫无反应。

p0303230 2008-03-03
  • 打赏
  • 举报
回复
是不是跟二维数组不能转换为 **一样啊??

int a[][] = {{},{},……}
int **p = a; //不过
sheenl 2008-03-03
  • 打赏
  • 举报
回复
[code c/c++]
#include <iostream>
using namespace std;

void func(void **p)
{
*(int*)(*(int*)p) = 12;
}

int main(void)
{
int *p = new int;
func((void**)&p); //can not use func(&p), compile error
cout<<*p<<endl;
delete p;
return 0;
}
[/code]
hai040 2008-03-03
  • 打赏
  • 举报
回复
ls好像乱了,反正差不多这意思
hai040 2008-03-03
  • 打赏
  • 举报
回复
以int为例
也就是说int可以自然的转成void(但其实没有void类型数据),所以int*可以自然转成void*
但int*不能自然转成void*,所以int**不能自然转成void**

int* q;
void* p1 = q;
void** p2 = &q;//编译不通过
sheenl 2008-03-03
  • 打赏
  • 举报
回复
这是什么书上的文字, 真是天书。

意思可能是普通指针可以自动转换成void*型的指针, 但是无法自动转换成void**指针吧。
p0303230 2008-03-03
  • 打赏
  • 举报
回复
帮顶
Chappell 2008-03-03
  • 打赏
  • 举报
回复
sf

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧