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

pourquoi il affich.horiz et s'il vous plaît expliquer comment est le tableau 2d de ptr mise en œuvre et ses élémentsde pointeurs

+1

@tushar: Si une question est des devoirs, il est pratique courante dans Stack Overflow pour ajouter une balise de devoirs à elle. – Tomalak

+2

Wow. Je me considère comme très bon en C, et je trouve encore le code ci-dessus très difficile à réfléchir. Si ce sont des devoirs, je ne sais pas à quel point c'est un problème de devoirs. Semble ne tester que la connaissance intime des bizarreries de C. Je peux penser à des choses plus utiles à enseigner ... – sblom

Répondre

12

Notez que x[y] se fixe plus serré que *x, de sorte que l'expression *ptr[2][2] est interprétée comme *(ptr[2][2]).

Notez également que x[y] == *(x+y).

Par conséquent

*(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

Je souhaite que nous pourrions voir qui vient de faire cette édition. Je suppose que seuls les modérateurs peuvent faire des modifications sans trace comme ça. L'édition est bien avec moi, mais l'anonymat semble pas cool ... – sblom

+0

@sblom: Non, c'est juste que j'ai enlevé cela dans les 5 minutes. – kennytm

+0

Ahh, je vois. Cool. – sblom