Ich habe ein sehr seltsames Beispiel für Zeiger, die Ihre freundliche Hilfe erfordert. Im Allgemeinen werden Zeiger verwendet, um auf eine Variable zu zeigen (siehe erstes Beispiel unten), aber wenn sie auf ein Array zeigt. Ich verstehe nicht, warum es nicht mehr deferencing erfordert das Array zu erhalten (siehe zweites Beispiel unten)Subtile Konzept von Zeigern und Array
printf("TEST: %i\n", x[i]);// I expect this should be *x[i]
Dies ist in der Tat sehr seltsam. Ist es nur eine C-Konvention oder wie erklärst du das?
EDIT:: Da viele eine klare Antwort geliefert haben, möchte ich eine weitere kleine Follow-up-Frage, wie Sie alle erwähnt x [i] = * (x + i), was ist mit x [i] [j] für ein zweidimensionales Array? Was ist das? Benötigt es Dereferenzierung?
Bei einer normalen Variable
int j = 4;
int* pointerj=&j;//pointerj holds address of j or points to j
printf("%d",*pointerj); returns the value that pointer j points to
Mit einem Array:
#include <stdio.h>
#include <stdlib.h>
int *function(unsigned int tags) {
int i;
int *var;
var = (int*)malloc(sizeof(int)*tags); // malloc is casted to int* type , allocated dynamical memory, it returns a pointer!
//so now var holds the address to a dynamical array.
for (i = 0; i < tags; i++) {
var[i] = i;
}
return var;
}
int main() {
int *x;
int i;
x = function(10);
for (i = 0; i < 10; i++) {
printf("TEST: %i\n", x[i]);// I expect this should be *x[i]
}
free(x); x = NULL;
return 0;
}
'x [i]' ist äquivalent zu '* (x + i)'. In der Tat bedeutet das, dass man '* x' als' x [0] 'schreiben könnte. –
Sie möchten vielleicht überprüfen [this] (https://stackoverflow.com/questions/381542/with-arrays-why-is-it-the-case-that-a5-5a) – Badda
@OliverCharlesworth Oh! Als Python-Programmierer wurde ich durch diese Konvention völlig in die Irre geführt !! Prost –