Hier habe ich einen Zeiger ptrauf ein Array arrvon 4 ganzen Zahlen. ptrzeigt auf das gesamte Array. ptr[0]oder *ptrzeigt auf das erste Element des Arrays. Wenn Sie also 1 hinzufügen, erhalten Sie ptr[0]die Adresse des zweiten Elements des Arrays.
Ich kann nicht verstehen, warum using sizeof(ptr[0])die Größe des gesamten Arrays angibt, 16 Bytes, nicht die Größe nur des ersten Elements, 4 Bytes (als ptr[0]Punkte auf das erste Element im Array).
int arr[4] = {0, 1, 2, 3};
int (*ptr)[4] = &arr;
printf("%zd", sizeof(ptr[0])); //output is 16
int *ptr = arr;? Nicht wirklich. int (*ptr)[4]Erstellt ptrals Zeiger auf ein vollständiges Array von vier intWerten. Eine solche Zeigersyntax ist erforderlich, um echte mehrdimensionale Arrays dynamisch zuzuweisen. Die "zweidimensionalen Arrays", die mit verschachtelten malloc()Schleifen erstellt und fälschlicherweise als mehrdimensionale Arrays beschrieben werden, sind tatsächlich 1-d-Arrays von Zeigern auf mehrere 1-d-Arrays. Siehe stackoverflow.com/questions/42094465/…
int *ptr = arr;? Das würde dazu führen, dass es auf den Start (das erste Element) des Arrays zeigt, was äquivalent zu ist&arr[0].