c / intermediate
Snippet
Array-Zerfall und Pointer-Arithmetik
In C 'zerfallen' Arrays in Pointer auf ihr erstes Element, wenn sie an Funktionen übergeben werden. Das bedeutet, dass die Größeninformation innerhalb der Funktion verloren geht. Verwenden Sie Pointer-Arithmetik (ptr + offset), um manuell durch das Speicherlayout zu navigieren.
snippet.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>void inspect_array(int *ptr, int size) {printf("Value at index 2: %d\n", *(ptr + 2));printf("Size of pointer: %zu bytes\n", sizeof(ptr));}int main(void) {int data[] = {10, 20, 30, 40, 50};printf("Size of actual array: %zu bytes\n", sizeof(data));// Array 'data' decays to a pointer to its first elementinspect_array(data, 5);return 0;}
Erklärung
1
*(ptr + 2)
Greift auf das dritte Element zu, indem ein Offset zum Basis-Pointer addiert wird.
2
sizeof(data)
Gibt die Gesamtgröße des Arrays in Bytes zurück, da es sich noch im Scope befindet.