siggivara Skrevet 7. september 2010 Del 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" } Lenke til kommentar
[kami] Skrevet 7. september 2010 Del 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 Lenke til kommentar
siggivara Skrevet 7. september 2010 Forfatter Del 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? Lenke til kommentar
[kami] Skrevet 7. september 2010 Del 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? Lenke til kommentar
siggivara Skrevet 7. september 2010 Forfatter Del 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 Lenke til kommentar
zotbar1234 Skrevet 7. september 2010 Del 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 Lenke til kommentar
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å