Welche Array methode?

  • Themenstarter Themenstarter haruna
  • Beginndatum Beginndatum
Also bis jetzt bin ich dazu gekommen.. dass ich die Arrayadresse an die Funktion übergebe.. diese kann sie lesen und Werte neueintragen.. aber nur innerhalb der Funktion.. :-/

also der Code soweit:


main()
{
int myArray[8][8]={0};
int myArraySize=8;
myArray[2][0]=10;

int *posStart = &myArray[2][0];
setArray(*posStart);
// //wenn ich posStart mit printf ausgebe ist es immernoch =10 und nicht 5
}

void setArray(int * posStart)
{
//wenn ich posStart mit printf ausgebe ist es =10
posStart=5;
//wenn ich posStart mit printf ausgebe ist es =5
}

da kann doch nicht mehr viel fehlen,oder?
Mein Professor schreibt im Skirpt dazu, "Funktionen, die Zeiger zurückgeben sind sehr gefährlich und sollten vermieden werden" also ist "return" wohl keine Lösung, aber was dann?
 
Hab jetzt die richtige Zahl raus.. aber das mit den Pointer auf Pointer versteh ich überhaupt net.. wenn mir das jemand noch erklären könnte, wäre ich sehr daaaaankbar.. ich sag ja diese Pointer sind mir net geheuer -.-

main()
{
int myArray[8][8]={0};
int myArraySize=8;
myArray[2][0]=10;


setArray(&myArray[2][0]); //also ich übergebe die Adresse von dem Wert "10"aus myArray[2][0]
//hab mir mein ganzen Array ausgeben lassen und es war an der stelle [2][0]=5****** x-D

}

void setArray(int* posStart) //das ist dann wohl der Zeiger auf die Adresse, oder ? !
{

*posStart=5;// und was ist wenn ich nur posStart=5 schreibe.. was wäre das?

}



und vllt noch zum verstehen...
wenn ich schreibe
int *pos; //also einen Zeiger mit dem Namen pos
pos=4; // was bedeutet das hier ?
 
Der Code ist richtig.

Wenn du bei setArray die Zeile ohne * schreiben würdest, würdest du die übergebene Adresse mit 5 überschreiben.
Hat aber auf den Rest des Programms keine Auswirkungen, da nur eine Kopie der Adresse übergeben wird.
Nur, wenn du danach das Gleiche mit * machen willst, bekommst du einen Absturz, da das Betriebssystem dich nicht auf die Adresse 5 schreiben lässt (die gehört 100% nicht deinem Programm, und zumindest Windows passt auf sowas auf)

Das ist ja auch der Sinn von Pointern: Normalerweise wird nur eine Kopie der Variablen übergeben.
So übergibst du eine Kopie der Adresse (sind ja nur 4 oder 8 Byte, und nicht das ganze Array).
Die Kopie hat aber eben noch immer den gleichen Wert und zeigt somit auf den gleichen Speicher wie das Original.

Wenn du deine Kopie von der Adresse mit 5 überschreibst, hast du die Kopie der Adresse eben nicht mehr. Aber es ist ja nur eine Kopie, hat also aufs Main keine Auswirkungen.

Und deine zwei Codezeilen unten:
Du machst einen neuen int-Pointer und gibst ihm die Adresse 4.
Mit *pos könntest du jetzt auf die Adresse 4 zugreifen, aber hier gilt das Gleiche wie bei 5: Windows hindert dich daran, Programmabsturz.

Gruß
 
Zurück