2011-01-11 330 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

間接

添加水平往往是必要的調用子類中的方法或直接訪問子類的元素。還有就是在具有指針指向...指向的東西沒有這樣的限制。