2010-04-20 113 views
0
char *a[]={"diamonds","clubs","spades","hearts"}; 
char **p[]={a+3,a+2,a+1,a}; 
char ***ptr=p; 
cout<<*ptr[2][2]; 

爲什麼它顯示H和請解釋如何是PTR實施和它的元素數組指針

+1

@tushar:如果一個問題是功課,它是在堆棧溢出常見的做法是一門功課的標籤添加到它。 – Tomalak 2010-04-20 18:16:31

+2

哇。我認爲自己對C很好,並且我很難想象上面的代碼。如果這是家庭作業,我不確定它有多好的作業問題。似乎只是測試對C的怪癖的深入瞭解。我可以想到更多有用的東西來教... – sblom 2010-04-20 18:26:46

回答

12

注意x[y]結合不同於*x更緊的2D陣列,所以表達式*ptr[2][2]被解釋爲*(ptr[2][2])的。

另請注意x[y] == *(x+y)

因此

*(ptr[2][2]) == *(p[2][2]) // ptr = p 
      == *((a+1)[2]) // p[2] == a+1 
      == *(*(a+1+2)) // x[y] == *(x+y) 
      == *(*(a+3))  // 1+2 == 3 
      == *(a[3])  // *(x+y) == x[y] 
      == *("hearts") // a[3] == "hearts" 
      == "hearts"[0] // *x == *(x+0) == x[0] 
      == 'h' 
+0

我當然希望我們能看到誰做了編輯。我認爲只有版主才能進行編輯而沒有這樣的痕跡。編輯對我來說很好,但匿名似乎並不冷...... – sblom 2010-04-20 18:31:24

+0

@sblom:不,它只是我在5分鐘內刪除了它。 – kennytm 2010-04-20 18:35:18

+0

啊,我明白了。涼。 – sblom 2010-04-20 18:37:23