Wie bestimme ich die Größe meines Arrays in C?
Das heißt, die Anzahl der Elemente, die das Array aufnehmen kann?
Wie bestimme ich die Größe meines Arrays in C?
Das heißt, die Anzahl der Elemente, die das Array aufnehmen kann?
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);
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
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.
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.
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).
"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();
Ich habe gelesen, dass der richtige Weg, um Integer-Konstanten in C zu deklarieren ist, um eine enum
Erklärung.
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.
6 Stimmen
Zur Typensicherheit siehe stackoverflow.com/questions/19452971/array-size-macro-that-rejects-pointers
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.