siggivara Skrevet 7. september 2010 Skrevet 7. september 2010 Som tittelen sier, kan man oppdatere en lokal variabel fra en annen metode? Noe lignende dette: void funcB(char *ptr2) { ptr2 = "hadde"; } void funcA() { char *ptr1 = "hei"; funcB(hei); printf("ptr1 = %s", ptr1); // ptr1 skal her være "hadde" }
[kami] Skrevet 7. september 2010 Skrevet 7. september 2010 Som tittelen sier, kan man oppdatere en lokal variabel fra en annen metode? Noe lignende dette: void funcB(char *ptr2) { ptr2 = "hadde"; } void funcA() { char *ptr1 = "hei"; funcB(hei); printf("ptr1 = %s", ptr1); // ptr1 skal her være "hadde" } ja. i c++ kan du gjøre det med referanser void change(int& value) { value = 123; } int test = 1; change(test); // test == 123 i c kan du gjøre det vha pekere void change (int* value) { *value =123; } int test = 1; change(&test); // test == 123 du kan også bruke globale verdier. int test = 1; void change() { test = 123; } change(); // test = 132
siggivara Skrevet 7. september 2010 Forfatter Skrevet 7. september 2010 Ah.. Tusen takk. Hadde glemt at jeg måtte ha * foran når jeg assignet ny verdi. Det funker bra, men jeg får alikevel advarsel fra kompilatoren: test.c: In function 'pekertest':test.c:7: warning: assignment makes integer from pointer without a cast test.c: In function 'main': test.c:43: warning: passing argument 1 of 'pekertest' from incompatible pointer type Hva betyr det?
[kami] Skrevet 7. september 2010 Skrevet 7. september 2010 Ah.. Tusen takk. Hadde glemt at jeg måtte ha * foran når jeg assignet ny verdi. Det funker bra, men jeg får alikevel advarsel fra kompilatoren: test.c: In function 'pekertest':test.c:7: warning: assignment makes integer from pointer without a cast test.c: In function 'main': test.c:43: warning: passing argument 1 of 'pekertest' from incompatible pointer type Hva betyr det? kan du paste hele kilden din her?
siggivara Skrevet 7. september 2010 Forfatter Skrevet 7. september 2010 (endret) kan du paste hele kilden din her? #include <stdio.h> #include <string.h> void pekertest(char *j) { *j = "Hadde"; } int main() { char *s = "halla"; pekertest(&s); printf("s = %s\n",s); } ttest.c: In function 'pekertest':test.c:5: warning: assignment makes integer from pointer without a cast test.c: In function 'main': test.c:10: warning: passing argument 1 of 'pekertest' from incompatible pointer type Endret 7. september 2010 av siggivara
zotbar1234 Skrevet 7. september 2010 Skrevet 7. september 2010 (endret) #include <stdio.h> #include <string.h> void pekertest(char *j) { *j = "Hadde"; } int main() { char *s = "halla"; pekertest(&s); printf("s = %s\n",s); } test.c: In function 'pekertest': test.c:5: warning: assignment makes integer from pointer without a cast test.c: In function 'main': test.c:10: warning: passing argument 1 of 'pekertest' from incompatible pointer type Feilen er eksakt det kompilatoren sier -- du lager en char fra en const char[] uten en typecast. Det er egentlig flere feil i koden: - char *s = "hallo" er veldig dumt i utgangspunktet, da du har peker til ikke-const char som peker på const data. - det du ønsker å modifisere er den aktuelle parameteren (s i tilfellet ditt). Siden C har kun pass-by-value, simuleres dette ved å sende pekeren til det du ønsker å modifisere. I denne situasjonen blir det en peker til s, altså en pointer to pointer to char. - pekertest vil deretter kunne tilordne til den aktuelle parameteren ved å dereferere pointer to pointer som er sendt. Endret 7. september 2010 av zotbar1234
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå