Feld aus einer Funktion zurückgeben
-
Hallo,
ich habe hier ein kleines Testbeispiel in dem eine Funktion ein Feld übergeben bekommt und auch wieder ein Feld zurückgeben soll. (Die Funktion überprüft alle Elemente und macht aus jeder 1 eine 4)
Dabei muss soweit ich mich erinnern kann der Zeigervektor zurückgegeben werden. Vielleicht könnte sich das jemand mal ansehen ich bekomm das leider nicht so ganz hin.
Vielen Dank.
#include <stdio.h> int** aus1mach4(int feld[2][2]); void ausgeben(int feld[2][2]); void main(void) { int i; int feld[2][2]={1,2,3,4}; int kopie[2][2]; kopie=aus1mach4(feld); ausgeben(kopie); } int** aus1mach4(int feld[2][2]) { int i; for(i=0;i<4;i++) if(feld[0][i]==1) feld[0][i]=4; return feld; } void ausgeben(int feld[2][2]) { printf("%i", feld[0][0]); printf("%i", feld[0][1]); printf("%i", feld[1][0]); printf("%i", feld[1][1]); }
-
Kannst du vllt. sagen, ob es einen KOmpilerfehler gibt oder ob es ein Logikfehler ist?
(Die Funktion überprüft alle Elemente und macht aus jeder 1 eine 4)
tut sie nicht sie überprüft feld[0][0], feld[0][1], feld[0][2], feld[0][3], wobei die letzten beiden gar nicht bestimmt sind.
-
Hi!
Folgendes wird ausgegeben:
C:\Programme\Microsoft Visual Studio\MyProjects\test\main.c(11) : warning C4047: '=' : 'int [2][2]' differs in levels of indirection from 'int ** '
C:\Programme\Microsoft Visual Studio\MyProjects\test\main.c(11) : error C2106: '=' : left operand must be l-value
C:\Programme\Microsoft Visual Studio\MyProjects\test\main.c(19) : warning C4047: 'return' : 'int ** ' differs in levels of indirection from 'int (*)[2]'feld[0][2] und feld[0][3] besetzen den gleichen Speicher wie feld[1][0] und feld[1][1], daher geht das schon.
-
#include <stdio.h> int[b]*[/b] aus1mach4(int feld[2][2]); void ausgeben(int feld[2][2]); void main(void) { //int i; int feld[2][2]={1,2,3,4}; int kopie[2][2]; [b]*(int*)kopie = *aus1mach4(feld);[/b] ausgeben(kopie); } int[b]*[/b] aus1mach4(int feld[2][2]) { int i; for(i=0;i<4;i++) if(feld[0][i]==1) feld[0][i]=4; [b]return (int *)feld; [/b] } void ausgeben(int feld[2][2]) { printf("%i", feld[0][0]); printf("%i", feld[0][1]); printf("%i", feld[1][0]); printf("%i", feld[1][1]); }
Funktioniert es?
-
Er sagt 0 Fehler, 0 Warnungen
Die Ausgabe sind aber irgendwelche Zahlen ausm Speicher
-
Ich weiß nicht, ob du unbedingt die kopie brauchst, wenn nicht könntest du doch statt
int kopie[2][2]; *(int*)kopie = *aus1mach4(feld); ausgeben(kopie);
dies
aus1mach4(feld); ausgeben(feld);
machen, da du in der aus1mach4-Funktion die Adressen von feld ansprichst.
edit: es scheint, als ob die schleife nicht funktioniert. Laut debugger werden nur [0][0] und [0][1] untersucht und wenn du die 1 und die 4 beim initialisieren vertauschst, kommt dann auch nur 4231 raus