C++ 2 Dimensionales Array an Funktion übergeben

S

Schmauch.

Gast
Wie übergebe ich ein in main deklariertes Array in eine andere Funktion?

Standard Arrays übergibt man ja mit
Code:
int main() {
  int Test [10];
  Test_funk(Test);
}

void Test_funk(int tmp_Test[]) {
  ...
}

Aber wie funktioniert das mit mehrdimensionalen Arrays?
Das anfügen eines zweiten [] funktioniert nicht.

Ich hoffe mir kann jemand weiterhelfen.


Danke.
 
Zuletzt bearbeitet:
Stichwort: Zeiger. Einfach mal Googlen dazu findet man Massen an Infos. Kleiner Tipp: Du musst einen Zeiger auf dein Array übergeben. Bei deiner Funktionsdeklaration fehlt übrigens der Datentyp vor "Test[]".
 
Zuletzt bearbeitet:
maccaveli schrieb:
Stichwort: Zeiger. Einfach mal Googlen dazu findet man Massen an Infos. Bei deiner Funktionsdeklaration fehlt übrigens der Datentyp vor "Test[]".

Stimmt, danke. Werde mal mit Zeigern probieren.
 
so

Code:
    int main() {
      int Test [10];
      Test_funk(Test);
    }
     
    void Test_funk(int* tmp_Test) {
      ...
    }

mit mehrdimensionalen Arrays geht es genauso
 
Zuletzt bearbeitet:
Wenn ich mich recht entsinne musst du doch bei primitiven Arrays noch für einen Parameter die Länge übergeben (wenn du ihn durchlaufen willst).
 
Die klassische Variante würde so aussehen:

Code:
void foo(int(* arr)[3],int length) {
	for (size_t i = 0; i < length; ++i) {
		for (size_t k = 0; k < 3; ++k) {
			std::cout << arr[i][k] << " ";
		}
		std::cout << "\n";
	}

}
int main()
{
	int arr[2][3]{
		{1,2,3},
		{4,5,6}
	};
	foo(arr, 2);
}
/*output:
  1 2 3
  4 5 6
*/
 
Zuletzt bearbeitet:
Schmauch. schrieb:
Wie übergebe ich ein in main deklariertes Array in eine andere Funktion?
Aber wie funktioniert das mit mehrdimensionalen Arrays?
Das anfügen eines zweiten [] funktioniert nicht.

Doch, das funktioniert. Du mußt nur die 'trailing dimension' angeben:

Code:
int main() {
  int Test [10][5];
  Test_funk(Test);
}

void Test_funk(int tmp_Test[][5]) {
  ...
}
 
Und wenn die Größe veränderbar (aber nach wie vor zur Compile-Zeit bekannt) sein soll:
Code:
template<size_t N, size_t M>
void testFunc(const int (&args)[M][N]) {
  std::cout << M << "x" << N << std::endl;
  ...
}

int main(int argc, char** argv) {
  int test[10][5];
  testFunc(test);
}

Ist natürlich auch nicht übermäßig flexibel. Wenn man viele Arrays verschiedener oder sogar dynamischer Größe hat, sollte man einen anderen Ansatz wählen, denn das hier bläht auf Dauer den vom Compiler generierten Code auf.
 
Zuletzt bearbeitet:
blöderidiot schrieb:
Doch, das funktioniert. Du mußt nur die 'trailing dimension' angeben:

Code:
int main() {
  int Test [10][5];
  Test_funk(Test);
}

void Test_funk(int tmp_Test[][5]) {
  ...
}

Ja, so hab ichs jetzt gelöst, danke!
 
Bei C++ würde ich empfehlen auch C++ Features zu nutzen:

Code:
#include <array>

int main() {
    std::array<int, 10> test;
    Test_funk(test);
}
 
void Test_funk(const std::array<int, 10>& test) {
  ...
}
 

Ähnliche Themen

Zurück
Oben