Rückgabe eines Arrays aus einer Funktion mit Pointer
ich versuche, herauszufinden, wie die Rückkehr ein array aus einer Funktion in der main().
Ich bin mit der C-Sprache.
Hier ist mein code.
#include <stdio.h>
int *initArray(int n){
int i;
int *array[n];
for(i = 0; i < n; i++){
array[i] = i*2;
}
return array;
}
main(){
int i, n = 5;
int *array[n];
array[n] = initArray(n);
printf("Here is the array: ");
for(i = 0; i < n; i++){
printf("%d ", array[i]);
}
printf("\n\n");
}
- Und das ist der Fehler die Konsole gibt mir:
2.c: In function ‘initArray’:
2.c:8:13: warning: assignment makes pointer from integer without a cast [enabled by default]
array[i] = i*2;
^
2.c:11:3: warning: return from incompatible pointer type [enabled by default]
return array;
^
2.c:11:3: warning: function returns address of local variable [-Wreturn-local-addr]
2.c: In function ‘main’:
2.c:23:4: warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘int *’ [-Wformat=]
printf("%d ", array[i]);
^
Es ist unmöglich!
Ich hasse es ein noob 🙁
Wenn Sie helfen könnten, mit den Erklärungen, würde ich mich freuen! 😀
- Anstatt edit mit deinem post sagen "Gelöst" Akzeptieren einer Antwort, die auch Ihren Vorstellungen entspricht. Upvote Antworten, die hilfreich waren.
- Sorry, ich bin neu auf dieser website. Ich denke, jede Antwort ist gut.
- Anstatt zu entschuldigen, abgeben Was soll ich tun, wenn jemand Antworten auf meine Frage? man beachte das "Bitte nicht hinzufügen, einen Kommentar auf Ihre Frage oder auf eine Antwort zu sagen, "Danke""
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie nicht wollen, um in Schwierigkeiten zu bringen lernen
malloc
und die dynamische Speicherverwaltung können Sie versuchen, diesewie Sie sehen, brauchen Sie nicht zurückzugeben, das array, wenn Sie erklären, es in
main()
, und übergeben Sie an die Funktion, können Sie einfach ändern Sie die Werte direkt in der Funktion.Wenn Sie möchten, Zeiger verwenden, dann
Edit: iharob Antwort ist besser als meine. Überprüfen Sie seine Antwort zuerst.
Edit #2: ich werde versuchen zu erklären, warum dein code falsch ist
Betrachten Sie die 2. Zeile von main (), die in Ihrer Frage:
Lassen Sie uns versuchen, Lesen Sie es nach hinten.
sagt, wir haben ein array mit n Elementen. Wir wissen nicht, was diese Elemente sind und was der name des Arrays ist, aber wir wissen, wir haben ein array der Größe n ist.
sagt Ihr array namens array.
sagt, Sie haben einen Zeiger auf ein array. Das array wird darauf hingewiesen, bezeichnet man als 'array' und hat eine Größe von n.
sagt, Sie haben einen Zeiger auf ein integer-array namens " array der Größe n.
In diesem Punkt, Sie sind 3/4 Weg, um ein 2d-array, da 2d-arrays bestehen aus einer Liste von Zeigern auf arrays. Das wollen Sie nicht.
Stattdessen, was Sie brauchen, ist:
Zu diesem Punkt, müssen wir untersuchen Ihre Funktion initArray:
In der zweiten Zeile der initArray hat die gleichen Fehler wie die zweite Zeile der main. Machen Sie es
Nun, hier kommt der Teil, der schwieriger zu erklären.
nicht reservieren von Speicherplatz für ein array. An diesem Punkt, es ist ein bescheidener Zeiger. So, wie wir das reservieren von Speicherplatz für ein array? Wir benutzen Sie malloc()
reserviert Speicherplatz nur für einen integer-Wert. An diesem Punkt, es ist eher eine variable als array:
[0]
reserviert Speicherplatz für n integer-Variablen, so dass es ein array:
z.B. n = 5:
[0][0][0][0][0]
Hinweis:Die Werte in der real-array sind wahrscheinlich Müll-Werte, weil malloc nicht null, der Speicher, im Gegensatz zu calloc. Die 0EN sind es der Einfachheit halber.
Jedoch malloc muss nicht immer funktionieren, das ist, warum Sie benötigen, um zu überprüfen, es ist return-Wert:
(malloc wird array = NULL, wenn nicht erfolgreich)
Müssen Sie dann überprüfen Sie den Wert der initArray.
Kann man nicht einfach ein array zurückgeben, so. Sie brauchen, um einen dynamisch reservierten Arrays, um das zu tun. Auch, warum hast du ein 2d-array überhaupt?
ist grundsätzlich (nicht ganz) das gleiche wie:
Letzteres ist ein bisschen flexibler, Sie können die Größe der Speicher, der mit malloc zugewiesen und Sie können zurückkehren, Zeiger aus Funktionen, wie das, was der code, den ich gepostet hat.
Vorsicht, obwohl, weil die dynamische Speicherverwaltung ist etwas, was Sie nicht wollen, in zu erhalten, wenn Sie nicht bereit für Tonnen von Schmerzen und Debuggen 🙂
Auch free () - alles, was malloc würde, nachdem Sie fertig sind es zu benutzen und Sie sollten immer den Rückgabewert überprüfen für malloc (), bevor Sie einen Zeiger, der zugewiesen wurde, wurde mit ihm.
Dank iharob mich daran erinnert, dies in der Antwort
free()
ing array. OP ist wahrscheinlich Missverständnis die array-syntax und nicht weiß, was ein 2d-array ist.int *array;
stattint *array[n];
Wollen Sie initialisieren das array? Du kannst es wie folgt ausprobieren.