Wie bekomme ich die Länge eines Arrays in C? Ist “sizeof” eine Lösung? [duplicate]

Lesezeit: 3 Minuten

Benutzeravatar von alishaik786
Alischaik786

Mögliches Duplikat:

Größe eines Arrays in der Programmiersprache C?
Warum hat ein C-Array einen falschen sizeof()-Wert, wenn es an eine Funktion übergeben wird?

Sehen Sie sich den folgenden Code an und schlagen Sie mir vor, was der Unterschied zwischen “Größe von” Schlüsselwort, wenn ich so verwendet habe:

#include<stdio.h>
#include<conio.h>
void show(int ar[]);
void main()
{
    int arr[]={1,2,3,4,5};
    clrscr();
    printf("Length: %d\n",sizeof(arr));
    printf("Length: %d\n",sizeof(arr)/sizeof(int));
    show(arr);
    getch();
}
void show(int ar[])
{
   printf("Length: %d", sizeof(ar));
   printf("Length: %d", sizeof(ar)/sizeof(int));
}

Aber die Ausgabe ist so:

Ausgabe ist:

Länge: 10

Länge: 5

Länge: 2

Länge: 1

warum ich so werde; Wenn ich die gesamten Daten von einem Array in ein anderes Array übertragen möchte, wie kann ich das tun?

Schlagen Sie mich vor, wenn jemand weiß.

  • Sie können die Größe eines Arrays in C nicht ohne weitere Informationen ermitteln.

    – m0skit0

    23. Februar 2012 um 12:31 Uhr

  • @Oli Charlesworth: Ich habe in Google gesucht, aber ich habe den von Ihnen bereitgestellten Link nicht erhalten. Danke für die Bereitstellung;

    – Alishaik786

    23. Februar 2012 um 12:41 Uhr

  • Sie können die Größe eines Array-Parameters nicht ermitteln.

    – Heiße Licks

    7. September 2014 um 13:50 Uhr

Benutzeravatar von unwind
entspannen

Arrays zerfallen zu Zeigern in Funktionsaufrufen. Es ist nicht möglich, die Größe eines Arrays zu berechnen, das nur als Zeiger dargestellt wird, einschließlich using sizeof.

Sie müssen ein explizites Argument hinzufügen:

void show(int *data, size_t count);

In dem Anruf können Sie verwenden sizeof um die Anzahl der Elemente für tatsächliche Arrays zu berechnen:

int arr[] = { 1,2,3,4,5 };

show(arr, sizeof arr / sizeof *arr);

Beachten Sie, dass sizeof gibt Ihnen die Größe in Einheiten von chardaher die Teilung durch das Wesentliche sizeof (int) benötigt wird, oder Sie würden einen viel zu hohen Wert erhalten.

Beachten Sie auch, als Punkt des Interesses und der Sauberkeit, dass sizeof ist nicht eine Funktion. Die Klammern werden nur benötigt, wenn das Argument ein Typname ist, da das Argument dann ein Cast-ähnlicher Ausdruck ist (z sizeof (int)). Sie können oft davonkommen, ohne tatsächliche Typen zu nennen, indem Sie dies tun sizeof auf Daten statt.

  • show(arr, sizeof arr / sizeof *arr);

    – Soran

    5. September 2014 um 18:21 Uhr

  • @Soran Danke, behoben!

    – abschalten

    7. September 2014 um 13:43 Uhr

  • Obwohl ich denke, dass dies die beste allgemeine Lösung ist – dh die Länge und das Array übergeben -, denke ich, dass es auch erwähnenswert ist, dass für statische Arrays (dh die Länge ändert sich während der Programmausführung nicht) die einfachste Lösung darin besteht, die Array-Größe festzulegen in den Quellcode mit einer Präprozessordefinition #define. ZB #define ARRAY_SIZE 5

    – Rechnung

    31. Mai 2015 um 20:42 Uhr


Aus diesem Grund werden beim Schreiben einer Funktion, die ein Array verwendet, zwei Parameter deklariert. einer, der ein Zeiger auf das Array ist, der andere, der die Größe des Arrays definiert.

show() nimmt die Adresse des Arrays, das auf 2 Bytes gespeichert ist. Betrachten Sie es als int *ar.

1400680cookie-checkWie bekomme ich die Länge eines Arrays in C? Ist “sizeof” eine Lösung? [duplicate]

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy