pointer parameter
-
High
Dachte ich könnte mit pointern umgehen!!!
Wie übergebe ich syntaktisch korrekt die Adresse eines pointers?
Zur Info: der Rückgabewert von alloc() steht nicht zur Verfügung.
#include <stdio.h>
#include <stdlib.h>typedef struct
{
int i;
char str[10];
float f;
}Struckt_s;void alloc(Struckt_s pStruckt)
{
pStruckt = (Struckt_s)malloc(sizeof(Struckt_s));
}int main(void)
{
Struckt_s *pStruckt = NULL;alloc(pStruckt);
pStruckt->i = 10; /*Hier krachts weil pStruckt immer noch "0" ist*/
return 0;
}Sitze irgendwie auf der Leitung, kann mir bitte einer einen Tritt geben!
Schon mal danke
brumm
-
ein zeiger ist ein zeiger (geiler satz, gell?)
das bedeutet er zeigt auf etwas (soweit ists ja klar)Guru: was passiert bei einem funktionsaufruf?
Ich: es wird eine Kopie der variable uebergeben.
Guru: Auch bei einem Zeiger?
Ich: Ja, eigentlich schon...
Guru: was wird genau kopiert?
Ich: der zeiger selber und nicht das objekt auf das er zeigt.
Guru: Warum funktioniert alloc() also nicht?
Ich: weil ich nur eine kopie des Zeigers uebergebe?
Guru: exakt. wie sieht nun die Loesung aus?
Ich: aeh... einen zeiger auf den zeiger uebergeben?
Guru: exakt.(ja ich hab meine kindische phase :p)
ich hoffe das reicht dir, wenn nicht: nachfragen.
-
Shade Of Mine das hast du mir sehr liebevoll beigebracht, noch mal danke.
An 3 Stellen gedreht und schon funzts, aber manchmal lässt halt auch das Hirn ein bischen aus. Was solls#include <stdio.h>
#include <stdlib.h>typedef struct
{
int i;
char str[10];
float f;
}Struckt_s;void alloc(Struckt_s **pStruckt)
{
*pStruckt = (Struckt_s*)malloc(sizeof(Struckt_s));
}int main(void)
{
Struckt_s *pStruckt = NULL;
alloc(&pStruckt);
pStruckt->i = 10; /*Hier krachts weil pStruckt immer noch "0" ist*/
return 0;
}By brumm
-
oder in c++ ne referenz übergeben, oder du machst es im malloc style, und gibst den zeiger zurück, sähe dann so aus:
#include <stdio.h> #include <stdlib.h> typedef struct { int i; char str[10]; float f; }Struckt_s; Struckt_s* alloc(Struckt_s *pStruckt) { /* der Parameter *pStruct wird nicht genutzt, es empfiehlt sich, stattdessen die Anzahl der zu allokierenden pStruckts zu übergeben, wenn das softwaremäßig noch machbar ist return ((Struckt_s*)malloc(n * sizeof(Struckt_s))); n ist hier der übergebene Parameter. */ return ((Struckt_s*)malloc(sizeof(Struckt_s))); } int main(void) { Struckt_s *pStruckt = NULL; pStruct = alloc(pStruckt); pStruckt->i = 10; /*Hier krachts weil pStruckt immer noch "0" ist*/ return 0; }
Ach ja, code-tags machen es erst richtig schön
mfg
-bg-