C ++中的指针赋值。 (指向指针的指针位于LHS上)

时间:2012-03-22 10:38:12

标签: c++ visual-c++ pointers dereference

IDirect3DSurface9 *var = NULL;

IDirect3DSurface9 *** ret;

我想将var取消引用的值赋值给ret指向的变量。

我做了foll:

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

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

  

错误C2679:二进制'=':找不到右手的操作符   “IDirect3DSurface9 *”类型的操作数(或者这些是不可接受的   转化率)。

正确的语法是什么?

3 个答案:

答案 0 :(得分:4)

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

更明确一点,让我们分解一下:

  • ret的类型为IDirect3DSurface9***
  • ret[0]的类型为IDirect3DSurface9**
  • *(ret[0])的类型为IDirect3DSurface9*
  • *(*(ret[0]))的类型为IDirect3DSurface9

显然,*(*(ret[0]))var类型IDirect3DSurface9*的作业不兼容。

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

答案 1 :(得分:2)

每个*[]都会占用一个间接级别。所以在你的代码中

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

左侧有IDirect3DSurface9类型,而右侧有类型IDirect3DSurface9 *。这两种类型不同,这就是你得到编译器错误的原因。您需要通过从LHS中删除(至少一个)*或将&(地址操作符)添加到RHS(以使&var)来解决此问题。

答案 2 :(得分:0)

你可能想要:

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

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