Hvordan fungerer sizeof med denne avreferansen av en peker til matrise?

 C Programming >> C C# Program >  >> C
Hvordan fungerer sizeof med denne avreferansen av en peker til matrise?

Type forvirring. ptr[0] er en matrise.

ptr er en peker til array 4 av int.
ptr[0] , som *ptr refererer pekeren til en matrise .
sizeof(ptr[0]) er størrelsen på en matrise.

Med sizeof(ptr[0]) , ptr[0] pådrar seg ikke "et uttrykk med typen ''peker til type'' som peker på det innledende elementet i array-objektet"-konvertering. (c11dr §6.3.2.1 3). Med sizeof , ptr[0] er en matrise.


ptr her er av typen pointer to an array of 4 int elements og matrisetypen har størrelse 16 på plattformen din (sizeof(int) * (antall elemetns)).

fordi C-type systemet har array-typer. Her både arr og *ptr har det. Hva du erklærer at du har. For å få sizeof int her bør du sizeof(ptr[0][0]) - der ptr[0] evalueres til array.


med int (*ptr)[4] = &arr ; du har en peker til en matrise med fire heltall og peker til arr.

ptr peker nå til arr , som en dobbel peker. Vi har tilgang til elementer av arr ved å bruke ptr[0][x] hvor x kan være 0 til 4 .

sizeof(ptr[0]) er det samme som sizeof(arr)