Pointer auf Arrays und deren Zugriff
-
Hi liebe Helfer,
also es handelt sich hier um die Programmiersprache C. Ich habe folgendes Problem: Ich habe im in der main.c folgendes stehen
main.c
#include <stdio.h> #include <stdlib.h> #include "system.h" int main(int argc, char *argv[]) { int count; void *startSystem; startSystem = initSystem(); printSystem(); generateNewSystem(startSystem); printSystem(); system("PAUSE"); return 0; }
system.c
#include "system.h" #include "globals.h" #include "random.h" #define N 20 int curSystem[N]; int tempSystem [N]; void printSystem (void){ int c; for (c=0;c<20;c++){ printf("%d, ",curSystem[c]); } printf("\n"); } void *initSystem (void){ int randNumber,c; for (c=0; c < 20; c++){ //init curSystem with random numbers randNumber = random (1,20); curSystem [c] = randNumber; } } void *generateNewSystem (void *currentSystem){ int randNumber, randPlace; randPlace = random(0,19); randNumber = random (1,20); printf("randPLace: %d, randNumber: %d\n",randPlace,randNumber); printf("NUMBEROFSYSTEM: %d\n",((int *)currentSystem)[0]); }
Das ist nur ein Teil der Aufgabe aber das Problem verfolgt micht.
Als erstes wird ein Pointer auf ein int array [20] erstellt (startSystem).
Nun soll ich den übergebenen Pointer auf das Array welches ich verändern soll, und zwar an einer zufälligen Stelle mit einer zufälligen Zahl. Hab nun erstmal versucht überhaupt in der Funktion festzustellen ob ich einen Wert des Arrays printen kann. Was mir nicht gelingt.1. Frage : Wie bekomme ich Zugriff auf den Int array ansich. Ich bekomme in der obigen Lösung nur Adressen oder undefinierte Werte ?
2. Frage: was bedeutet z.B. void *initSystem? Mir geht es um das Sternchen vor initSystem.
Danke vorab
-
Wenn du deinen eigenen Code nicht verstehst, dann hast du ihn wohl nicht selber geschrieben. Wer hat das dann geschrieben? Und wieso versuchst du, das zu benutzen? Der Code ist grauenhaft, voller dicker Fehler, und sollte nicht als Vorbild dienen.
-
Würde das auch nie so machen. Aber ist eine Aufgabe von der Universität. Alle Funktionsköpfe und Variablennamen, so wie deren Werte sind gegeben.
-
BaronGER schrieb:
Würde das auch nie so machen. Aber ist eine Aufgabe von der Universität. Alle Funktionsköpfe und Variablennamen, so wie deren Werte sind gegeben.
Also die system.c ist von dir? Denn, nichts für ungut, die meinte ich, als ich sagte, der Code wäre grauenhaft und falsch. Das Interface an sich ist noch in Ordnung (ich vermute, die Funktionalität soll später noch erweitert werden, dann wäre das sogar gut so).
void *initSystem (void)
wenn ich es so schreibe (ist nämlich egal, wo man die Leerzeichen setzt):
void* initSystem (void)
Ist es dann klar?
-
Ah ok alles klar. Danke. Und zu Frage 1 ?
-
BaronGER schrieb:
Ah ok alles klar. Danke. Und zu Frage 1 ?
Nun, deine Lösung geht ziemlich an der Aufgabenstellung vorbei, daher kann diese Frage nicht sinnvoll beantwortet werden. Die Aufgabe soll ganz bestimmt nicht mit globalen Variablen gelöst werden. Hier geht es offensichtlich um Objektkapselung, also eher das genaue Gegenteil. Du solltest alles weg schmeißen und dir nochmal die Kursunterlagen ansehen. Oder gerne auch die Grundlagen von C, denn da sind auch noch einige ganz schöne Anfängerfehler drin (z.B. kein return in Funktionen, die einen Wert zurück geben), obwohl dies eigentlich schon eine recht fortgeschrittene Aufgabe ist. Ich weiß daher gar nicht, wo ich mit Erklärungen ansetzen sollte, bei dem, was hier vom Aufgabensteller gewollt ist oder doch eher auf viel niedrigerem Niveau?