Wie übergebe ich ein Array bzw. Pointer als Parameter?
-
Hallo zusammen

Ich bin noch absoluter Neuling auf dem gebiet C++ und habe über die Sufu keinen dementsprechenden Eintrag gefunden...
Nun zu meinem Problem:
Ich möchte gerne ein Array, bzw. einen Pointer auf das Array als Parameter an eine andere Funktion übergeben.
Wie stelle ich das an?
Ich fülle in meinem Testcode 6 zufällig generierte zahlen in das entsprechende Array....#include "main.h" #include <iostream> #include <time.h> using namespace std; void main() { vZufallsGenerator(); vAusgabe(); system("pause"); } void vZufallsGenerator() { int iArray[6]; srand ((unsigned)time(NULL)); for (int i=0; i<=5; i++) { iArray[i] = rand() % 41 +1; } int *pointer; pointer = iArray; } int iAusgabe() { }Wie bekomme ich den Pointer jetzt in die Ausgabe-Funktion um die Zahlen per cout auszugeben?

Ich freue mich auf Hilfe

-
Ich nehme mal an, dass main.h die Deklarationen der Funktionen vZufallsGenerator und iAusgabe enthält. Grundlegend musst du, um etwas als Parameter an eine Funktion zu geben, es erstens im aufrufenden Kontext haben und zweitens die Funktion so schreiben, dass sie den Parameter auch entgegen nimmt. Beides ist in deinem Code nicht der Fall.
Man könnte das beispielsweise so anfangen:
#include <cstdlib> #include <ctime> #include <iostream> void make_random_numbers(int *dest, std::size_t dest_len) { for(std::size_t i = 0; i < dest_len; ++i) { dest[i] = std::rand() % 41 + 1; } } void print_random_numbers(int const *numbers, std::size_t len) { for(std::size_t i = 0; i < dest_len; ++i) { std::cout << numbers[i] << '\n'; } } int main() { // main muss int zurückgeben! std::srand(std::time(0)); int numbers[6]; make_random_numbers(numbers, 6); print_random_numbers(numbers, 6); // Nur in main: Kein return bedeutet, dass 0 zurückgegeben wird. // Per Konvention signalisiert das der umgebenden Shell einen erfolgreichen // Programmdurchlauf. }Die Vorgehensweise mit nackten Zeigern, wie ich sie gerade beschrieben habe, ist in C++ allerdings eher unüblich, weil sie vergleichsweise umständlich ist. Einfacher geht es mit std::vector:
#include <cstdlib> #include <ctime> #include <iostream> #include <vector> std::vector<int> make_random_numbers(std::size_t this_many) { std::vector<int> result; // Das hier ist nicht direkt notwendig, aber vorher genug Speicher anzufordern // ist aus Performancegründen sinnvoll. result.reserve(this_many); while(result.size() < this_many) { result.push_back(std::rand() % 41 + 1); } return result; } void print_random_numbers(std::vector<int> const &numbers) { for(std::size_t i = 0; i < numbers.size(); ++i) { std::cout << numbers[i] << '\n'; } } int main() { std::srand(std::time(0)); print_random_numbers(make_random_numbers(6)); }Ansonsten gibt es noch std::(tr1::)array, was dann Sinn macht, wenn die Anzahl der zu generierenden Zahlen zur Compilezeit feststeht. Wenn dein Compiler die relevanten Teile von C++11 bereits beherrscht:
#include <array> #include <cstdlib> #include <ctime> #include <iostream> std::array<int, 6> make_six_random_numbers() { std::array<int, 6> result; for(std::size_t i = 0; i < result.size(); ++i) { result[i] = std::rand() % 41 + 1; } return result; } void print_six_random_numbers(std::array<int, 6> const &numbers) { for(std::size_t i = 0; i < numbers.size(); ++i) { std::cout << numbers[i] << '\n'; } } int main() { std::srand(std::time(0)); print_six_random_numbers(make_six_random_numbers()); }P.S.: Soweit ich weiß, wirft Dunkelheit keinen Schatten.
-
Gut, du bist Neuling wie du sagst. Ist nicht schlimm!
Deine Frage wäre ein guter Grund, sich mit den Grundlagen von C und C++ vertraut zu machen. Bücher für Einsteiger können helfen, Tutorials auch. Beginne ganz unten mit einer Funktion, die zunächst nur eine einzelne Variable - a=func(b) - entgegennimmt und a=b+1 zurückgibt. Danach probierst du dasselbe mit einem Pointer für b. Erst wenn du das verstanden hast, gehst du zu Arrays über.Es bringt dir wenig, ohne diese Grundlagen in Sufus zu suchen oder hier um Hilfe und Lösungen zu bitten. Wir können sinnvoll nur dann antworten, wenn du die Anwort auch verstehst. Lernen musst du selbst, und das geht am besten mit eigenem Probieren!
-
Vielen Dank seldon & berniebutt

Ich bin ja eigentlich zu faul um zu lesen..
Werde mich jedoch trotzdem nochmal durch ein E-Book quälen