C++中的指针分配。 (指针的指针到指针位于LHS)

问题描述:

IDirect3DSurface9 *var = NULL; 

IDirect3DSurface9 *** ret; 

我要分配由VAR解除引用到由RET指向的变量的值。C++中的指针分配。 (指针的指针到指针位于LHS)

我做了FOLL:

(*(*(ret[0]))) = var; 

我觉得这是正确的C++语法。但是,这是为什么我收到编译错误如下:

错误C2679:二进制“=”:没有操作员发现这需要右手 数类型“IDirect3DSurface9 *”的(或这些没有接受 转换) 。

什么是正确的语法?

+1

你可以编辑你的问题,删除所有大胆的脸全部大喊大叫。你不需要留言。我们可以在这里很好。 – 2012-03-22 10:41:33

+0

我编辑了一下,但我实际上并不确定星号的星期数:-S – 2012-03-22 10:43:33

+0

@KerrekSB Gah,星秒数不断变化。我正在删除我的答案! – 2012-03-22 10:44:28

您已经对指针进行了3次取消引用。一旦您将其作为数组处理并使用索引[0],然后再使用*运算符两次。为了与var兼容,您应该只参考两次。

更明确,让我们打破这:

  • ret有类型IDirect3DSurface9***
  • ret[0]具有类型IDirect3DSurface9**
  • *(ret[0])有型号IDirect3DSurface9*
  • *(*(ret[0]))具有类型IDirect3DSurface9

而且很显然它遵循*(*(ret[0]))不分配与var兼容其类型IDirect3DSurface9*

至于你的代码真的应该是什么,我不能肯定地说,但你将需要删除一个间接层。

+0

不可思议!!!!非常感谢你这么快速的回答!我解决了它。 :)我没有*(*(ret [0]))= * var;现在两种类型的LHS和RHS都是一样的。所以没有编译错误。 – codeLover 2012-03-22 11:10:55

+0

这消除了编译错误,但我不相信这是正确的。当然你的任务应该在'IDirect3DSurface9 *'级别而不是'IDirect3DSurface9'级别。 – 2012-03-22 11:16:17

+0

是的,我可以改变它像*(ret [0])= var;但我怀疑它是如何影响我们是否在IDirectX3DSurface9 *级别或IDirectX3DSurface9级别进行分配。 Bcoz最后我们复制存储在tyoe IDirectX3DSurface9变量中的值吧?对不起,如果我错了。请纠正我和澄清。谢谢。 – codeLover 2012-03-22 11:24:06

你可能想:

(*(*(ret[0]))) = &var; 

*(*(*(ret[0]))) = var; 

*[]带走了一个间接层。因此,在你的代码

(*(*(ret[0]))) = var; 

的左手侧的类型为IDirect3DSurface9,而右手边的类型为IDirect3DSurface9 *。这两种类型是不同的,这就是为什么你得到编译器错误。你需要通过移除(至少一个)*从LHS解决这一问题或添加&(地址运算符)的RHS(有&var)。