2017-01-29 5 views
-3

Auf Seite 106 von K & R C, in strcmp Funktion, dauert es Zeiger *s und *t als Argumente, sondern in der for Schleife gibt esIst * s äquivalent zu s [i]?

s[i]==t[i]  

als Bedingung.

Ich will nur, um zu bestätigen, für Arrays, wie

*(s+i) and s[i] 

synonym sind, können daher die Anweisung Funktion s[i] statt *s verwenden?

+1

Ich denke, die Funktion sind falsch dar: Es braucht nicht " Zeiger '* s' und' * t' ", eher, es dauert Zeiger' s' und 't'. –

+1

Eine einfache Suche nach dem '[]' Poerator hätte dies beantwortet. Bevor Sie eine Frage stellen, versuchen Sie, sich selbst zu lösen. Und wie sollte '* s' dasselbe wie' s [i] 'sein (außer' i' ist Null)? – Olaf

+1

Ja, es stimmt, dass für jeden gültigen Zeiger * oder Array * 's' und Index' i' der Ausdruck '* (s + i)' gleich 's [i]' ist. Das bedeutet, dass '* s' gleich' s [i] '*** nur *** ist, wenn' i' gleich null ist ('* s' ist das gleiche wie' * (s + 0) ', was gleich ist als 's [0]'). –

Antwort

4

Vom C Standard (6.5.2.1 Array Subskribierung)

2 A Post fi x Ausdruck durch einen Ausdruck in eckigen Klammern [] ist eine indizierte Bezeichnung eines Elements eines Arrays Objekts. Die Definition des tiefgestellten Operators [] ist, dass E1 [E2] identisch mit (* ((E1) + (E2))) ist. Aufgrund der Konvertierungsregeln, die für den binären + -Operator gelten, wenn E1 ein Array-Objekt ist (äquivalent ein Zeiger zum Anfangselement eines Array-Objekts) und E2 eine ganze Zahl ist, bezeichnet E1 [E2] den E2- das Element von E1 (von Null ausgehend).

So

a[i] entspricht *(a + i) und wiederum entspricht i[a]

Zum Beispiel

int a[1] = { 10 }; 

printf("a[0] == *(a + 0) is %s\n", a[0] == *(a + 0) ? "true" : "false"); 
printf("a[0] == 0[a] is %s\n", a[0] == 0[a] ? "true" : "false"); 
Verwandte Themen