#include<stdio.h>
int main(){
int a1[]={6,7,8,18,34,67};
int a2[]={23,56,28,24};
int a3[]={-12,27,-31};
int *y[]={a1,a2,a3};
int **a= y;
printf("%d\n",a[0][2]);
printf("%d\n",*a[2]);
printf("%d\n",*(++a[0]));
printf("%d\n",*(++a)[0]);
printf("%d\n",a[-1][1]);
return 0;
}
Wenn ich den obigen Code ausführen, ist Ausgabe 8, -12,7,23,8. Aber wenn ich die letzten 3 Zeilen zunegativer Index im Array von Zeigern in C
printf("%d\n",*(++a[2]));
printf("%d\n",*(++a)[1]);
printf("%d\n",a[-1][1]);
Ausgang ist 8, -12,27,27,7. Ich kann die letzte Printf-Anweisung nicht verstehen. Wie berechnet sich ein [-1] [etwas]? Und nach mir soll *(++a)[1]
56 statt 27 drucken!
Bezüglich des negativen Index, siehe [Sind negative Array-Indizes in C erlaubt?] (Https://stackoverflow.com/questions/3473675/are-negative-array-indexes-allowed-in-c) – Galen
'a' ist kein Array, es ist ein Zeiger. 'a [-1]' ist das gleiche wie '* (a - 1)' was in Ordnung ist, wenn 'a' in die Mitte eines Arrays zeigt. Und gestern hatten wir [noch lustigere Beispiele] (https://stackoverflow.com/questions/47683569/can-someone-please-explain-me-this-pointer-ccode) –
@Galen Ich habe es schon gelesen. Es sagt, wenn der negative Index ist, gehen sie einfach zurück in das Array. Aber ich kann es hier nicht anwenden. – Prakhar