Gå til innhold

Oppdatere lokal variabel i annen metode


Anbefalte innlegg

Videoannonse
Annonse

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

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

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

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 av siggivara
Lenke til kommentar

#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 av zotbar1234
Lenke til kommentar

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...