Beim Durchlaufen einiger C-Interview-Fragen habe ich eine Frage gefunden, die besagt: "Wie wird die Größe eines Arrays in C ermittelt, ohne den Operator sizeof zu verwenden?", Mit der folgenden Lösung. Es funktioniert, aber ich kann nicht verstehen warum.
#include <stdio.h>
int main() {
int a[] = {100, 200, 300, 400, 500};
int size = 0;
size = *(&a + 1) - a;
printf("%d\n", size);
return 0;
}
Wie erwartet wird 5 zurückgegeben.
edit: Leute haben auf diese Antwort hingewiesen , aber die Syntax unterscheidet sich ein wenig, dh die Indizierungsmethode
size = (&arr)[1] - arr;
Daher glaube ich, dass beide Fragen gültig sind und eine etwas andere Herangehensweise an das Problem haben. Vielen Dank für die immense Hilfe und gründliche Erklärung!
*((*(&array + 1)) - 1)
sicher, das letzte Element eines automatischen Arrays abzurufen? . tl; dr *(&a + 1)
ruft Undefined Behvaior
(ptr)[x]
ist das gleiche wie *((ptr) + x)
.
&a + 1
wird nicht auf ein gültiges Objekt verwiesen, daher ist es ungültig.