Register for your free account! | Forgot your password?


Go Back   elitepvpers > Coders Den > C/C++
You last visited: Today at 14:49

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



Mehrdimensionale Felder [Hilfe]

Discussion on Mehrdimensionale Felder [Hilfe] within the C/C++ forum part of the Coders Den category.

Reply
 
Old   #1
 
elite*gold: 0
Join Date: Jan 2013
Posts: 819
Received Thanks: 405
Question Mehrdimensionale Felder [Hilfe]

Hallo Leute,

ich habe mir vor kurzem das Taschenbuch "C++ Objektorientiertes Programmieren von Anfang an" gekauft und ich verstehe das mit den Mehrdimensionale Feldern nicht so ganz.

So wird das im Buch dargestellt:
Code:
#include <iostream>
using namespace std;

int main (){
	int test [][3][3]=
	{
			{{1},{3,4},{5,6}},
			{{7,8},{9,10},{11,12}}
	};
	cout << "\n";
	cout << " " << int (test [0][0][0]);
	cout << " " << int (test [0][0][1]);
	cout << " " << int (test [0][1][0]);
	cout << " " << int (test [0][1][1]);
	cout << " " << int (test [0][2][0]);
	cout << " " << int (test [0][2][1]);
	cout << " " << int (test [1][0][0]);
	cout << " " << int (test [1][0][1]);
	cout << " " << int (test [1][1][0]);
	cout << " " << int (test [1][1][1]);
	cout << " " << int (test [1][2][0]);
	cout << " " << int (test [1][2][1]);
	return 0;
}
Meine Fragen wären:
1.Warum kann ich das erste Feld frei lassen und was hat es mit den anderen Felder auf sich?
Weil wenn ich da [][3][2] z.B. eingebe, kommt da genau das selbe raus. :/
Code:
int test [][3][3]
2. Könnte mir jemand erklären wie die Zahlen dort zugeordnet werden? Ich verstehe nicht warum 3x die [0][0][0] = 1 ist oder warum z.B. [1][2][1] = 12 ist. (Link wo das beschrieben wird wäre auch nett. )


Ich bedanke mich jetzt schon für jede hilfreiche Antwort.
Lg. Frame
-[Frame]* is offline  
Old 02/01/2017, 16:13   #2
 
elite*gold: 34
Join Date: Apr 2011
Posts: 1,476
Received Thanks: 1,225
Ich glaub du solltest wieder dein Wissen was Arrays anbelagt wieder auffrischen bzw. das Kapitel Arrays wieder durchgehen^^

Ich weiß am Anfang kanns verwirrend sein, aber je öfters mans wiederholt versteht mans

Quote:
Originally Posted by -[Frame]* View Post
Meine Fragen wären:
1.Warum kann ich das erste Feld frei lassen und was hat es mit den anderen Felder auf sich?
Weil wenn ich da [][3][2] z.B. eingebe, kommt da genau das selbe raus. :/
Code:
int test [][3][3]
Das erste und leere [] ist deshalb leir weil die größe Implizit bestimmt wird. Das heißt:
Code:
int x[] = { 1,2 }; // implizit, size = 2
int x[2] = { 1,2 }; // explizir, size = 2
// beides haben die selbe Bedeutung
In deinem Fall konkret:
Code:
int test[][3][3] =
{
	{ /* inhalt */ }, // zeilen index 0 / Element 1

	{ /* inhalt */ }, // zeilen index 1 / Element 2
}; // größe = 2

//äquivalent zu:
int test[2][3][3] =
{
	{ /* inhalt */ }, // zeilen index 0 / Element 1

	{ /* inhalt */ }, // zeilen index 1 / Element 2
}; // größe = 2
Also: Dein Array test[][3][3] kann max. 18 Elemente beinhalten. Jedes der 2 Elemente(also das erste[]) kann 3 Elemente halten, welches 6 Elemente ausmacht, und jedes der 6 Elemente kann 3 Elemente halten.

[][3][2] kannst du deshalb schreiben weil dein test-array immer 2 Elemente initialisert. (Teste es, schreib ein 3 Element dazu, das wird nicht funktionieren)

Quote:
Originally Posted by -[Frame]* View Post
2. Könnte mir jemand erklären wie die Zahlen dort zugeordnet werden? Ich verstehe nicht warum 3x die [0][0][0] = 1 ist oder warum z.B. [1][2][1] = 12 ist. (Link wo das beschrieben wird wäre auch nett. )
Naja sagen wir mal du hast ein simples array:
Code:
int test[] = { 1, 2, 3 }; // implizit größe = 3
Wie du hoffentlich weißt, beginnt das erste array Element beim Index 0.
Code:
test[0] // Index: 0 Element: 1 Inhalt: 1
test[1] // Index: 1 Element: 2 Inhalt: 2
test[2] // Index: 2 Element: 3 Inhalt: 3
2d-Array:
Code:
int test[3][2] =
{   //{spalte1, spalte2}
        {2, -5}, // zeilen index 0
        {4, 0}, // zeilen index 1
        {9, 1} // zeilen index 2
};
Code:
test[0][0] // Zeilen-Index: 0 Spalten-Index: 0 Element: 1 Inhalt: 2
test[0][1] // Zeilen-Index: 0 Spalten-Index: 1 Element: 2 Inhalt: -5



Würdest du jetzt alles ausgeben, kann man schön den Zugriff sehen(in deinem Fall jetzt konkret):
Code:
int test[][3][3] =
	{
		{ { 1 }, { 3, 4 }, { 5, 6 } },

		{ { 7, 8 }, { 9, 10 }, { 11, 12 } },
	};

	for (int i = 0; i < 2; ++i)
		for (int j = 0; j < 3; ++j)
			for (int k = 0; k < 3; ++k)
				std::cout << "test[" << i << "][" << j << "][" << k << "] = " << test[i][j][k] << std::endl;
Ausgabe:
Quote:
test[0][0][0] = 1
test[0][0][1] = 0
test[0][0][2] = 0
test[0][1][0] = 3
test[0][1][1] = 4
test[0][1][2] = 0
test[0][2][0] = 5
test[0][2][1] = 6
test[0][2][2] = 0
test[1][0][0] = 7
test[1][0][1] = 8
test[1][0][2] = 0
test[1][1][0] = 9
test[1][1][1] = 10
test[1][1][2] = 0
test[1][2][0] = 11
test[1][2][1] = 12
test[1][2][2] = 0

Ich hoffe ich konnte es dir besser erklären, ich selber bin kein großer Künstler der Erklärung aber ich versuchs zumindest und werde immer besser und besser

Einfach bisschen googeln und schon findest du gute Beispiele und Erklärungen^^
Eine gute Anlaufstelle ist immer stackoverflow oder tutorialspoint(um einen einfacheren Überrblick und Erklärung zu kriegen)
XxharCs is offline  
Thanks
1 User
Old 02/01/2017, 22:23   #3
 
elite*gold: 0
Join Date: Jan 2013
Posts: 819
Received Thanks: 405
Erstmal vielen Dank für deine ausführliche Antwort
Ich habe zwar noch ein paar kleine Probleme aber die werde ich wohl selber lösen können.
-[Frame]* is offline  
Old 02/27/2017, 21:58   #4
 
elite*gold: 100
Join Date: Apr 2008
Posts: 868
Received Thanks: 1,362
Edit: Nachtrag. Bitte nicht verwirren lassen! Der Post auf den sich dieses Posting bezieht wurde gelöscht!

Ursprungsinhalt:


Vorsicht! Ein mehrdimmensionales Feld ist kein Mehrdimmensionaler Zeiger!

Code:
int array[5][5] != int **array;
Der Zugriff auf ein 2D-Array ist nicht *(*(array + x) + y) sondern:

Code:
*(array + sizeof(innere_dimmension) * y + x)
Siehe auch das:


Was du beschreibst ist ein Baum. Dieses Schema im Speicher darzustellen wäre sowas von heftig aufwendig, das macht keinen Sinn.
florian0 is offline  
Thanks
3 Users
Reply


Similar Threads Similar Threads
Eq in die richtigen Felder
12/30/2014 - Metin2 Private Server - 0 Replies
Hey Com, Ich habe grad ein neues Eq eingefügt doch wenn ich Schuhe anziehe verschwinden die , wenn ich Armband Schild Kette anziehe , ist es oben beim Helm anstatt auf die richtigen Felder. Armband Type:2 Subtype:3 Kette: Type:2
C++ Mehrdimensionale Arrays
08/14/2011 - C/C++ - 7 Replies
Hey Leute, Ich lern C++ schon seit 2 Monaten und bin jetzt bei den Arrays und Strukturen (Vll. brauchte ich ein bissl. lange,aber dafür behersche ich das gelernte zu 100%). und zwar habe ich da ein BspQuelltext: #include <iostream> using namespace std; // Hauptprogramm
Wv Felder hat die Accounttabelle?
02/06/2011 - Metin2 Private Server - 0 Replies
Hallo, könnte mir jemand sagen, wieviele Felder die Accounttabelle hat? Danke Jaffa PS: Wenn jemand für ne Gegenleisung (30e*g) mir auchnoch alle Namen raussucht, soll derjenige sich per PN melden.
DT FELDER
06/13/2010 - Metin2 - 0 Replies
Kennt jemand ne Seite wo alles aufgezeichnet ist auf welchem Feld der jeweilige Schmied kommt? Weil cih hab gar keine Ahnung
[Hilfe]Regi Script Felder!
05/13/2010 - Metin2 Private Server - 0 Replies
<TD width="581" align=left vAlign=top><TABLE cellSpacing=0 cellPadding=0 width="96%" align=center border=0><TBODY><TR><TD height=30><table width="560" border="0" align="center" cellpadding="1" cellspacing="2" class="news" height="544"><form id="form2" name="form2" method="post" action="regist_yes.php" onSubmit="return CheckValid(this)"><tr><td height="23" colspan="2"><font color="yellow"><u><strong> ;GoldRain&nbsp;Registration</strong>< /u></font><strong><u></u&g t;</strong><table width="100%"...



All times are GMT +2. The time now is 14:49.


Powered by vBulletin®
Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2021 elitepvpers All Rights Reserved.