Elemente eines Arrays

Juhubuntu

Grünschnabel
Hallo
Ich habe mir eine Funktion geschrieben, die eine Zeichenkette als Array annimmt (es funktioniert sogar wie es soll!). Jetzt möchte ich gerne die Anzahl der Element wissen, die der Funktion als Parameter übergeben wird. Ich habe schon folgendes versucht, was aber nicht klappt:

Code:
int anzahl = sizeof(meinarray)/sizeof(meinarray[0]);
Bitte helft mir.
Danke schon jetzt
MfG
Juhubuntu
 
Bei mir funktioniert das.

C++:
#include <iostream>

int main(int argc, char** argv) {
	int array[100];
	int foo;

	std::cout << sizeof(foo) << std::endl; //4
	std::cout << sizeof(array[0]) << std::endl; //4
    std::cout << sizeof(array) << std::endl; //400
	std::cout << sizeof(array)/sizeof(array[0]) << std::endl; //100

	return 0;
}
 
Zuletzt bearbeitet von einem Moderator:
Ehm zeig mal wie du es übergibst. Du musst sicher sein können, dass sich meinarray aufm Stack befindet, sonst geht das nicht!

Bei Zeichenketten ist eigtl. std::strlen die richtige Wahl!
 
Hallo
Danke erstmal
Kommt denn nicht alles gleich automatisch aufn stack? Oder erst aufn Heap? naja,
auf jeden Fall hier is der Code:
Code:
int arrayfunktion(char meinarray[])
{
    int anzahl = sizeof(meinarray)/sizeof(meinarray[0]);
    cout << meinarray[0] << "\n"<< anzahl << "\n" << endl;
    return 0;
}
Auch wenn ich jetzt Als Parameter "HalloWelt" übergebe; es kommt immer 4 aufm Bildschirm. Warum?
 
Hi.
Hallo
Danke erstmal
Kommt denn nicht alles gleich automatisch aufn stack? Oder erst aufn Heap? naja,
auf jeden Fall hier is der Code:
Code:
int arrayfunktion(char meinarray[])
{
    int anzahl = sizeof(meinarray)/sizeof(meinarray[0]);
    cout << meinarray[0] << "\n"<< anzahl << "\n" << endl;
    return 0;
}
Auch wenn ich jetzt Als Parameter "HalloWelt" übergebe; es kommt immer 4 aufm Bildschirm. Warum?
Weil ein Array als Zeiger übergeben wird - und auf deiner Maschine ist ein Zeiger nunmal 4 Byte groß.

Du kannst auf diese Art und Weise nicht feststellen wie groß das Array ist; mit sizeof kann man nur die Größe von statischen Arrays zur Kompilationszeit ermitteln.

Du mußt die Größe des Arrays (sprich: Anzahl der Elemente) als Parameter beim Funktionsaufruf mit übergeben.

Gruß
 
Jap.
C++:
void foo(int* ptr_array, size_t size);
wäre C-Style:
C++:
void foo(int* ptr_array, const std::size_t size);
// bzw. besser:
void foo(std::vector<int>& ref_array);
C++-Style!

Oder was auch geht:
C++:
void foo(int* ptr_first, int* ptr_last);
 
Zuletzt bearbeitet:
Ok, Vielen Dank!
So wie ich das jetzt verstanden habe, muss ich Zeiger auf die Arrays definieren und dann diese übergeben?
 
Hi.
Ok, Vielen Dank!
So wie ich das jetzt verstanden habe, muss ich Zeiger auf die Arrays definieren und dann diese übergeben?
Nein. Array-Variablen sind nichts anderes als Zeiger. Du mußt einfach nur das Array übergeben.

Die hättest statt
C:
void foo(int* ptr_array, size_t size);
auch schreiben können:
C:
void foo(int ptr_array[], size_t size);
Das bedeutet beides dasselbe. Die zweite Variante macht nur etwas mehr deutlich, das es sich um ein Array handelt und nicht nur um einen Zeiger auf ein einzelnes Objekt.

Aufrufen kannst du die Funktion dann so:
C:
int array[32]; // ist ein statisches Array

 // hier kannst du noch sizeof(..) verwenden, aber in der Funktion nicht mehr!
const size_t sz = sizeof(array) / sizeof(array[0]);

foo(array, sz);
Grup
 
Zuletzt bearbeitet:
Zurück