Du kan på ett tillförlitligt sätt bestämma längden på arrayer i C med hjälp av olika metoder. Detta gör det enklare att hantera arrayer dynamiskt och anpassa sig till förändringar i storlek.

Vad är array-längd i C och vilka metoder finns det för att mäta den?

När du mäter längden på en array i C mäter du antalet element som arrayen innehåller. Denna information är avgörande för att komma åt enskilda element i arrayen, gå igenom den eller utföra manipulationer. När du deklarerar en array i C allokeras minnet för elementen i arrayen i RAM-minnet kontinuerligt (dvs. i sekventiell ordning utan mellanrum). I C finns det ingen inbyggd funktion för att bestämma arrayens längd, så du måste bestämma den manuellt.

De vanligaste metoderna är:

  • sizeof()
  • Pekararitmetik
  • Slingor

sizeof()

sizeof()en operator i C. Den bestämmer storleken på en datatyp eller en variabel i byte under kompileringstiden. Returtypen för operatorn sizeof är size_t, en osignerad heltalstyp som representerar storleken i byte. I C kan du också använda funktionen sizeof() för att beräkna arrayers längd.

Syntax

För att bestämma antalet element i en array måste du dela arrayens totala storlek med storleken på ett enskilt element.

data_type arrayLength = sizeof(array_name) / sizeof(array_name[index]);
c
  • data_type: Detta är datatypen där längden på arrayen kommer att lagras.
  • array_name: Anger namnet på arrayen.
  • sizeof(array_name): Detta uttryck returnerar arrayens totala storlek i byte.
  • sizeof(array_name[index]): Genom att dela arrayens totala storlek med storleken på ett enskilt element får du antalet element i arrayen.
  • index: Detta representerar indexet för ett element i arrayen.

Exempel

I det här exemplet använder vi sizeof() för att bestämma storleken på arrayen myArray samt storleken på ett enskilt element. Med denna information kan vi sedan beräkna antalet element i arrayen genom att dividera den totala storleken med storleken på ett enskilt element. Vi kommer att mäta storleken på elementet och arrayen i byte.

int main() {
    int myArray[] = {1, 2, 3, 4, 5};
    size_t totalSize = sizeof(myArray);
    size_t elementSize = sizeof(myArray[0]);
    size_t arrayLength = totalSize / elementSize;
    printf("Total size of the array: %d bytes\n", (int)totalSize);
    printf("Size of a single element: %d bytes\n", (int)elementSize);
    printf("Number of elements in the array: %d\n", (int)arrayLength);
    return 0;
}
c

Resultatet är:

Total size of the array: 20 bytes
Size of a single element: 4 bytes
Number of elements in the array: 5
c

Pekararitmetik

Pekare i sig innehåller inte information om storleken eller längden på en array. Vi kan dock använda pekararitmetik tillsammans med adresserna till arrayelementen för att bestämma längden på C-arrayen.

Syntax

data_type arr_length = *(&arr + 1) - arr;
c
  • &arr: Detta skapar en pekare som pekar på en hel array av element.
  • (&arr + 1): Här ökas pekaren som pekar på arrayen arr med 1. Eftersom arr är en array betyder detta att pekaren kommer att peka på nästa på varandra följande array som är av samma typ som arr.

Exempel

Uttrycket *(&arr + 1) - arr beräknar skillnaden mellan pekaren som pekar på nästa array &arr + 1 och pekaren som pekar på det första elementet i den ursprungliga arrayen. I detta fall är det “nästa” minnesområdet slutet på den första arrayen. Den resulterande skillnaden är lika med antalet element i arrayen.

#include <stdio.h>
int main() {
    int arr[] = {1, 2, 3, 4, 5};
    int length = *(&arr + 1) - arr;
    printf("Number of elements in the array: %d\n", length);
    return 0;
}
c

Utgång:

Number of elements in the array: 5
c

För slingor

En annan metod för att bestämma arrayers längd i C är att använda en for-slinga. Denna metod innebär att man går igenom arrayen och räknar antalet element den innehåller. För att använda denna teknik måste arrayen vars längd du vill bestämma finnas i samma kodomfång som den for-slinga du använder för att bestämma dess längd.

Exempel

Här ökar slingan räknaren arrayLength för varje element som passerar. Villkoret i < sizeof(arr) / sizeof(arr[0]) säkerställer att slingan endast körs om det finns element i arrayen.

#include <stdio.h>
int main() {
    int arr[] = {1, 2, 3, 4, 5, 6, 7, 8};
    size_t arrayLength = 0;
    for (size_t i = 0; i < sizeof(arr) / sizeof(arr[0]); ++i) {
        arrayLength++;
    }
    printf("Number of elements in the array: %d\n", arrayLength);
    return 0;
}
c

Utgång:

Number of elements in the array: 8
c
Gå till huvudmeny