2010-11-25 11 views
2

Ich bin mir bewusst, dass foo[bar] ist gleich *(foo + bar), aber was ist *foo[bar] gleich, wie Zugriff auf *argv[2]? Ich bin etwas verwirrt in das Verständnis, ich nahm vielleicht etwas wie *(*(foo) + bar), aber bin mir nicht sicher ..Zeigerarithmetik auf Zeiger des Zeigers (* argv [])?

Ich entschuldige mich, wenn dies eine einfache Antwort ist.

+1

Sie könnten es einfach ausprobieren. Verwenden Sie im Zweifelsfall Klammern. – codymanix

Antwort

2

Es ist mein Verständnis, dass es **(foo + bar)

ist Warum ?

*foo[bar] zerfällt zu * und foo[bar] seit * ist getan, nachdem foo[bar] dereferenziert wurde.

Sie bereits beantwortet, was foo[bar] == *(foo + bar)

nun eine weitere * hinzufügen und Sie haben *(*(foo + bar))

bekam Welche der Pointer-Dereference vereinfacht auch **(foo + bar)

5

*a[b] entspricht *(a[b]) aufgrund der C- und C++ - Vorrangregeln. so *a[b] entspricht **(a+b)

+0

Ah! das ist viel einfacher zu verstehen. Ich wusste, dass es einfach war, muss nur 11 Minuten warten, um zu akzeptieren: P – John

3

Wenn das folgende äquivalent sind,

foo[bar] 
*(foo + bar) 

Dann sind die folgenden äquivalent zu:

*foo[bar] 
**(foo + bar) 
+0

Danke James. – John

+0

Verstehe ich richtig, dass Ihr if-Teil damit zu tun haben soll, dass * und [] überlastet werden können? –

+0

@Armen Tsirunyan: Ich denke, das "Wenn ... dann" zeigt nur den Prozess der logischen Deduktion, der gefolgt werden kann, um das Ergebnis zu finden. – caf

0

*foo[bar] zu foo[bar] ist.

0

Erklärung char *argv[] Angenommen wird, bezieht sich argv[2] auf das dritte Element des argv Array, das ein char * ist, und *argv[2] Dereferenzierungen dieser Zeiger, Sie das erste Zeichen in diesem String gibt.

Verwandte Themen