Du kan på ett till­för­lit­ligt 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­änd­ring­ar 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 in­ne­hål­ler. Denna in­for­ma­tion är avgörande för att komma åt enskilda element i arrayen, gå igenom den eller utföra ma­ni­pu­la­tio­ner. När du de­kla­re­rar en array i C allokeras minnet för elementen i arrayen i RAM-minnet kon­ti­nu­er­ligt (dvs. i se­kven­ti­ell 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 van­li­gas­te metoderna är:

  • sizeof()
  • Pe­ka­ra­rit­me­tik
  • Slingor

sizeof()

sizeof()en operator i C. Den bestämmer storleken på en datatyp eller en variabel i byte under kom­pi­le­rings­ti­den. Re­tur­ty­pen för operatorn sizeof är size_t, en osignerad hel­tal­s­typ som re­pre­sen­te­rar storleken i byte. I C kan du också använda funk­tio­nen 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 re­tur­ne­rar 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 re­pre­sen­te­rar 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 in­for­ma­tion 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

Re­sul­ta­tet är:

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

Pe­ka­ra­rit­me­tik

Pekare i sig in­ne­hål­ler inte in­for­ma­tion om storleken eller längden på en array. Vi kan dock använda pe­ka­ra­rit­me­tik till­sam­mans med adres­ser­na till ar­ray­e­le­men­ten 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 skill­na­den mellan pekaren som pekar på nästa array &arr + 1 och pekaren som pekar på det första elementet i den ur­sprung­li­ga arrayen. I detta fall är det “nästa” min­nes­om­rå­det slutet på den första arrayen. Den re­sul­te­ran­de skill­na­den ä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 in­ne­hål­ler. 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ä­ker­stäl­ler 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