Array aus Funktion an die Main übergeben
-
Du hast kein Array in deinem Programm, hast du das überhaupt mal getestet?
int[a];
Erstens gibt es schon eine Variable namens a und zweitens definiert man so kein Array.
int[i] = i;
Hier das gleiche.
Das hier ist ein Array:int c[10];
Verrain schrieb:
//Welcher Rückgabewert muss definiert werden?
Wenn du int a wieder zurückgeben willst, dann muss der Rückgabewert natürlich auch vom Typ int sein.
Diese Grundlegenden Dinge werden aber alle in einem Buch/Tutorial erklärt.
-
- VLA benutzen nur Deppen (Zeile 4)
- Zeile 8 kompiliert nichtint *f(int a[],int n) { int i; for(i = 0; i < n; i++) { a[i] = i; } return a; } int main() { int n = 55; int *a = f( calloc(sizeof*a,n), n ); ... free(a); return 0; }
-
Wutz schrieb:
- Zeile 8 kompiliert nicht
Zeile 4 auch nicht.
-
Ohja, dass waren 2 schnelle Tippfehler.
Danke Wutz für das Beispiel. Das kann ich dann problemlos auf andere Problemstellungen ummünzen.
Grüße
Verrain
-
Vielleicht noch eine kurze Anmerkung, falls jemand anderes auf diesen Thread stößt:
Laut dieser Dokumentation:
http://www.tutorialspoint.com/c_standard_library/c_function_calloc.htmWird die Callocfunktion andersherum definiert:
int *a = f( calloc(n, sizeof*a), n );anstatt falscherweise:
int *a = f( calloc(sizeof*a, n), n );
-
Es ist unerheblich in welcher Reihenfolge die Parameter kommen.
Beide sind vom Typ
size_t
und die Größe des Speichers ist das Produkt aus beiden Werten.
-
Ich bekomme folgende Fehlermeldung aus dem Compiler:
t.c: In function 'int main()': t.c:24:26: error: invalid conversion from 'void*' to 'int' [-fpermissive] *a = calloc(n, sizeof*a);
Was soll ich tun?
-
Verrain schrieb:
Was soll ich tun?
Keine Veränderungen an Quelltexten vornehmen, die du nicht verstehst. Vielleicht hilft es auch, ein gutes Anfängerbuch zu lesen, Kapitel Pointer. Denn dann verstehst du die gegebenen Hilfestellungen auch.
-
Ich habe den obigen Beispielcode 1 zu 1 kopiert und er hat NICHT kompiliert!
Ich habe nichts daran verändert. Alles was ich brauche ist ein funktionierendes Beispiel!
-
Verrain schrieb:
Ich habe den obigen Beispielcode 1 zu 1 kopiert und er hat NICHT kompiliert!
Aha.
Wutz schrieb:
int *a = f( calloc(sizeof*a,n), n );
vs.
Verrain schrieb:
*a = calloc(n, sizeof*a);
-
int *a = f( calloc(sizeof*a,n), n );
ist etwas anderes als:
int *a; *a = f( calloc(sizeof*a,n), n );
oder
int a; *a = f( calloc(sizeof*a,n), n );
-
Okay, dass kam nach einigem rumprobieren raus.
Dennoch hat er vergessen, dass calloc einen void* Typ zurück gibt, er in der Funktion aber an der Stelle ein int* deklariert hat....
-
Er hat nichts vergessen.
Du hast vergessen, dich über die Grundlagen von C zu informieren.
-
Verrain schrieb:
Dennoch hat er vergessen, dass calloc einen void* Typ zurück gibt, er in der Funktion aber an der Stelle ein int* deklariert hat....
Hat er nicht. Falls du ein Problem mit den Pointerumwandlungen haben solltest, dann bedeutet dies, dass du einen C++-Compiler für deinen C-Code benutzt hast. Bevor du anderen Leuten Missinformation vorwirfst, solltest du vielleicht erst einmal sicherstellen, ob du überhaupt weißt, von welcher Sprache du überhaupt redest.