Kann ich bestimmen die Größe/Länge eines Arrays in C++ die zimmerreserviereung, ohne das hartcodieren?

Ich bin im Grunde auf der Suche nach einer Art "dynamischen" Weg der Größe/Länge eines Arrays an eine Funktion.


Habe ich versucht:

void printArray(int arrayName[])
{
    for(int i = 0 ; i < sizeof(arrayName); ++i)
    {
        cout << arrayName[i] << ' ';
    }
}

Aber ich erkannte, dass es nur der Auffassung Ihrer Bytegröße und nicht, wie viele Elemente im array.


Und auch:

void printArray(int *arrayName)
{
    while (*arrayName)
    {
        cout << *arrayName << ' ';
        *arrayName++;    
    }
}

Dieser hat zumindest mir alles, was gedruckt, aber mehr als das, was ich erwartet hatte, so dass es nicht wirklich funktionieren, wie ich es mir vorstelle.
Ich denke, es ist weil ich nicht genau sagen, wie groß ich brauche es so ist, spielt es "sicher" und wirft mir einige große Größe und schließlich beginnt mit dem drucken mich sehr ungeraden zahlen nach meinem letzten element im array.


So, ich habe endlich dieses umgehen, doch glaube ich, dass es etwas besseres gibt!:

void printArray(int *arrayName)
{
    while (*arrayName)
    {
        if (*arrayName == -858993460)
        {
            break;
        }
        cout << *arrayName << ' ';
        *arrayName++;
    }
    cout << '\n';
}

Nach läuft das Programm ein paar mal erkannte ich den Wert nach dem letzten element des Arrays, dass ich input ist immer: -858993460, also machte ich es brechen die while-Schleife ab, sobald dieser Wert festgestellt wird.


include <iostream>
include <conio.h>

using namespace std;

    //functions prototypes
void printArray (int arrayName[], int lengthArray);

    //global variables

    //main
int main ()
{
    int firstArray[] = {5, 10, 15};
    int secondArray[] = {2, 4, 6, 8, 10};
    printArray (firstArray,3);
    printArray (secondArray,5);

    //end of program
    _getch();
    return 0;
}

    //functions definitions
void printArray(int arrayName[], int lengthArray) 
{
    for (int i=0; i<lengthArray; i++)
    {
        cout << arrayName[i] << " ";
    }
    cout << "\n";
}

Danke Ihnen sehr.

  • Dein grundlegendes Missverständnis ist, dass die Funktion erhält ein array, wenn in Wirklichkeit, es erhält einen Zeiger. Arrays übergeben werden können, um Funktionen (oder zurück von Ihnen). Bauen Sie auf Zeiger.
  • Ich denke ich bekomme es. Also, wenn ich ein array erstellen, das ist eine Ansiedlung irgendwo in den Speicher. Wenn ich will, zu "benutzen", das array, um es zu übergeben, um eine Funktion, ich bin tatsächlich an der Funktion eine Adresse, wo dieses array kann man in der Erinnerung, die von sich selbst weit überlegene Speicher-Weise, als wäre es die übergabe eines tatsächlichen array?
InformationsquelleAutor Hugo Santos | 2013-05-19
Schreibe einen Kommentar