2011-01-11 329 views
4

可能重复:
Uses for multiple levels of pointer dereferences?指针指向指针

我读另一篇文章,这使我这个问题。这到底意味着什么?人们用指针指向指向指针的指针的深度也有多深......我明白指针指向的是指针,但是为什么你会在这之后再去?你使用****有多深?

Foo(SomePtr *** hello);

+0

许多已经重复在SO上,例如[用于多级指针取消引用?](http://stackoverflow.com/questions/758673/use s-for-multi-levels-of-pointer-dereferences) – 2011-01-11 09:31:35

回答

7

它是用C++少见肯定。

在C很可能出现其中:

  • 您可以使用“对象”,这是结构,而你总是通过他们周围或在堆上为指针创建。
  • 你有这样的指针的集合作为动态分配的数组,因此T **其中T是类型。
  • 你想得到一个数组,所以你传入一个T ***,它用T **(T *指针数组)填充你的指针。

这将是有效的C,但在C++:

  • 第一步将是相同的。您仍然在堆上分配对象并指向它们。
  • 第二部分会因使用矢量而不是数组而发生变化。
  • 第三部分会因使用引用而不是指针而有所不同。因此,你会通过传递vector<T*>&(或vector<shared_ptr<T> >&不是T ***
0

我从来没有超越'指针指针' - 我认为如果你不得不这样做,那么你的设计就有根本的错误。

+2

我认为DirectX或者COM让我有三级derp。 – dreamlax 2011-01-11 09:22:23

2

指向动态指针数组的指针可能是?对我有意义。

10

你可以指整数的3维数组作为int *** intArray;

+0

嗨!你能详细说明你的意思吗? 这是我有的一段代码,我不明白发生了什么: `int *** grid;` `grid = calloc(nx,sizeof(int **));` for(i = 0 ; i secluded 2016-07-13 07:12:25

0

我认为根本原因,这是认为“在计算机科学的所有问题都可以通过一个多层次来解决获得矢量间接“。http://www.c2.com/cgi/wiki?OneMoreLevelOfIndirection

间接

添加水平往往是必要的调用子类中的方法或直接访问子类的元素。还有就是在具有指针指向...指向的东西没有这样的限制。