1407 Stimmen

Wie bestimme ich die Größe meines Arrays in C?

Wie bestimme ich die Größe meines Arrays in C?

Das heißt, die Anzahl der Elemente, die das Array aufnehmen kann?

6 Stimmen

0 Stimmen

Eine Antwort ist Gegenstand von eine Metafrage .

1 Stimmen

Wenn die Antworten keinen Sinn ergeben, denken Sie daran, dass beim Kompilieren von C in Assembler die Größeninformation des Arrays verloren geht. Wenn Sie etwas deklarieren wie int foo[5]; dass 5 nirgendwo in Ihrer kompilierten ausführbaren Datei erscheint.

6voto

Keivan Punkte 944

Die Funktion sizeof gibt die Anzahl der Bytes zurück, die von Ihrem Array im Speicher verwendet werden. Wenn Sie die Anzahl der Elemente in Ihrem Array berechnen wollen, sollten Sie diese Zahl durch die sizeof Variablentyp des Arrays. Sagen wir int array[10]; Wenn der Variablentyp Integer in Ihrem Computer 32 Bit (oder 4 Byte) ist, müssen Sie, um die Größe Ihres Arrays zu ermitteln, Folgendes tun:

int array[10];
int sizeOfArray = sizeof(array)/sizeof(int);

0 Stimmen

Sollte sein size_t sizeOfArray anstelle von int .

3voto

Shih-En Chou Punkte 3471

Sie können die & Betreiber. Hier ist der Quellcode:

#include<stdio.h>
#include<stdlib.h>
int main(){

    int a[10];

    int *p; 

    printf("%p\n", (void *)a); 
    printf("%p\n", (void *)(&a+1));
    printf("---- diff----\n");
    printf("%zu\n", sizeof(a[0]));
    printf("The size of array a is %zu\n", ((char *)(&a+1)-(char *)a)/(sizeof(a[0])));

    return 0;
};

Hier ein Beispiel für die Ausgabe

1549216672
1549216712
---- diff----
4
The size of array a is 10

9 Stimmen

Ich habe nicht abgelehnt, aber das ist so, als würde man einen Nagel mit einem Ziegelstein einschlagen, weil man nicht bemerkt hat, dass ein Hammer neben einem liegt. Außerdem neigen die Leute dazu, die Verwendung von nicht initialisierten Variablen zu missbilligen... aber hier denke ich, dass es Ihren Zweck gut genug erfüllt.

2 Stimmen

@Dmitri hier wird auf keine uninitialisierten Variablen zugegriffen

1 Stimmen

Hmmm. Zeigersubtraktion führt zu ptrdiff_t . sizeof() führt zu size_t . C tut pas bestimmen, was breiter oder höher/gleichrangig ist. So ist der Typ des Quotienten ((char *)(&a+1)-(char *)a)/(sizeof(a[0])) ist nicht sicher size_t und damit das Drucken mit z kann zu UB führen. Einfach verwenden printf("The size of array a is %zu\n", sizeof a/sizeof a[0]); ist ausreichend.

3voto

Azatik1000 Punkte 662

Eine elegantere Lösung wird sein

size_t size = sizeof(a) / sizeof(*a);

1 Stimmen

Zu wenig Kontext, um alle Fallstricke dieses Musters zu vermeiden.

2voto

Jency Punkte 240

Die einfachste Antwort:

#include <stdio.h>

int main(void) {

    int a[] = {2,3,4,5,4,5,6,78,9,91,435,4,5,76,7,34};//for Example only
    int size;

    size = sizeof(a)/sizeof(a[0]);//Method

    printf ("size = %d",size);
    return 0;
}

1 Stimmen

Eine Erklärung wäre angebracht. Z.B.: Inwiefern ist es das einfachste? Was ist die Idee/der Kern? Wie unterscheidet sie sich von früheren Antworten? Was ist das Ergebnis der Durchführung? Von das Hilfe-Center : "...erklären Sie immer, warum die von Ihnen vorgestellte Lösung angemessen ist und wie sie funktioniert" . Bitte antworten Sie bis Bearbeitung (Änderung) Ihrer Antwort , nicht hier in den Kommentaren ( ohne "Bearbeiten:", "Aktualisieren:" oder ähnlich - die Antwort sollte so aussehen, als wäre sie heute geschrieben worden).

-1voto

Ohad Punkte 2585

"Sie haben eine subtile Art eingeführt, sich selbst in den Fuß zu schießen"

C 'native' Arrays speichern ihre Größe nicht. Es wird daher empfohlen, die Länge des Arrays in einer separaten Variable/Konstante zu speichern und diese bei jeder Übergabe des Arrays zu übergeben, d.h.:

#define MY_ARRAY_LENGTH   15
int myArray[MY_ARRAY_LENGTH];

Sie sollten immer vermeiden, native Arrays (es sei denn, Sie können nicht, in diesem Fall, achten Sie auf Ihren Fuß). Wenn Sie C++ schreiben, verwenden Sie die STL 's 'vector' Container. "Im Vergleich zu Arrays bieten sie fast die gleiche Leistung und sind viel nützlicher!

// vector is a template, the <int> means it is a vector of ints
vector<int> numbers;  

// push_back() puts a new value at the end (or back) of the vector
for (int i = 0; i < 10; i++)
    numbers.push_back(i);

// Determine the size of the array
cout << numbers.size();

Siehe: http://www.cplusplus.com/reference/stl/vector/

0 Stimmen

Ich habe gelesen, dass der richtige Weg, um Integer-Konstanten in C zu deklarieren ist, um eine enum Erklärung.

21 Stimmen

Die Frage bezieht sich auf C, nicht auf C++. Also keine STL.

12 Stimmen

Diese Antwort fällt nicht in den Themenbereich und sollte gelöscht werden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X