Hallo,
ich wollte mal fragen wie Zeiger auf Funktionen funktioniert.
Ich habe eine Aufgabe gehabt mit 2 Arrays,wo ich die Anzahl der Elemente und die Werte der einzelnen Elemente eingeben muss und mit diesen 2 Arrays soll ich ein drittes gemischtes Array aus beiden machen.
Die Aufgabe habe ich einigermaßen verstanden und habe mir mal den Code dazu angeschaut, ich habe nicht verstanden wieso die Funktion folge_einlesen ein Pointer ist und was das bringen soll. Ich verstehe die normalen Pointer, die Zeigen halt auf Speicheradressen und dadurch kann man den Wert ausgeben, aber nicht wie das bei Funktionen geht.
Ich hoffe ihr könnt mich aufklären.
Hier mal der Code:
Mit freundlichen Grüßen
atiufi
ich wollte mal fragen wie Zeiger auf Funktionen funktioniert.
Ich habe eine Aufgabe gehabt mit 2 Arrays,wo ich die Anzahl der Elemente und die Werte der einzelnen Elemente eingeben muss und mit diesen 2 Arrays soll ich ein drittes gemischtes Array aus beiden machen.
Die Aufgabe habe ich einigermaßen verstanden und habe mir mal den Code dazu angeschaut, ich habe nicht verstanden wieso die Funktion folge_einlesen ein Pointer ist und was das bringen soll. Ich verstehe die normalen Pointer, die Zeigen halt auf Speicheradressen und dadurch kann man den Wert ausgeben, aber nicht wie das bei Funktionen geht.
Ich hoffe ihr könnt mich aufklären.
Hier mal der Code:
C:
#include <stdio.h>
#include <stdlib.h>
int *folge_einlesen(int length) {
// Speicherplatz fuer die Folge reservieren.
int *folge = malloc(length * sizeof(int));
// Pruefen ob es erfolgreich war.
if (folge == NULL) {
printf("Fehler bei der Speicherallokation\n");
return(NULL);
}
// Die Werte einlesen.
int i;
for (i = 0; i < length; ++i) {
printf("%d. Element: ", i + 1);
scanf("%d", &folge[i]);
}
return(folge);
}
int main() {
int laenge = 0, *folge1, *folge2;
int eingabe_gueltig;
do {
printf("Laenge der einzugebenden Folgen eingeben:");
eingabe_gueltig = scanf("%d", &laenge);
// Den Eingabepuffer leeren
while ((getchar()) != '\n');
}
while(eingabe_gueltig <= 0 || laenge <= 0);
// Elemente der ersten Folge einlesen
printf("\nElemente der ersten Folge eingeben\n");
folge1 = folge_einlesen(laenge);
if (folge1 == NULL) {
printf("Fehler beim Erzeugen der Folge\n");
return(1);
}
// Elemente der zweiten Folge einlesen
printf("\nElemente der zweiten Folge eingeben\n");
folge2 = folge_einlesen(laenge);
if (folge2 == NULL) {
printf("Fehler beim Erzeugen der Folge\n");
return(1);
}
// Speicherplatz fuer eine neue Folge doppelter Laenge reservieren
int *folge3 = malloc(2 * laenge * sizeof(int));
if (folge3 == NULL) {
printf("Fehler bei der Speicherallokation\n");
return(1);
}
// Die Inhalte von folge1 und folge2 abwechselnd in folge3 speichern
int i;
for (i = 0; i < laenge; ++i) {
folge3[2 * i] = folge1[i];
folge3[2 * i + 1] = folge2[i];
}
// folge3 ausgeben
printf("\nGemischtes Array ist: ");
for (i = 0; i < 2 * laenge; ++i)
printf("%d ", folge3[i]);
printf("\n");
free(folge1);
free(folge2);
free(folge3);
folge1 = folge2 = folge3 = NULL;
return(0);
}
Mit freundlichen Grüßen
atiufi