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
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
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'
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
@sblom: Non, c'est juste que j'ai enlevé cela dans les 5 minutes. – kennytm
Ahh, je vois. Cool. – sblom
excellente réponse Voir KennyTM une explication ... mais je pensais que ce serait le cas idéal pour professer l'utilisation de votre débogueur pour « visualiser » la mémoire .. et de fournir une réponse facile à ce type de question.
alt text http://img717.imageshack.us/img717/5536/callstack.png
@tushar: Si une question est des devoirs, il est pratique courante dans Stack Overflow pour ajouter une balise de devoirs à elle. – Tomalak
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