Avatar billede jakobdo Ekspert
25. maj 2003 - 17:37 Der er 11 kommentarer og
1 løsning

Kalde en funktion, med en int som parameter.

Hej, jeg har prøvet at lave følgende kode:

#include<stdio.h>
#include<string.h>

int main()
{
  int test;
  if (locateMsg(test)==0)
  {
    printf("Test - %d\n",test);
  }
}

int locateMsg(int temp)
{
  temp = 7;
  return 0;
}

Dette giver en fejl, og test kommer ikke til at indeholde 7, men -12345453434.... :o)

Skal jeg bruge & eller * så det virker...
Avatar billede arne_v Ekspert
25. maj 2003 - 17:40 #1
Ja.

locateMsg(&test)

og

int locateMsg(int *temp)
{
  *temp = 7;
  return 0;
}
Avatar billede gumbert Nybegynder
25. maj 2003 - 17:41 #2
du skal lave en pointer til temp da variablen temp ellers vil være uforandret efter funktionskaldet
Avatar billede gumbert Nybegynder
25. maj 2003 - 17:41 #3
Du er en tand hurtigere arne :)
Avatar billede teepee Nybegynder
25. maj 2003 - 17:57 #4
Arne, vil du forklare hvad følgende så betyder?:

locateMsg(temp)

int locateMsg(int& midl)
{...}
Avatar billede arne_v Ekspert
25. maj 2003 - 18:22 #5
Den metode jeg angav virker i både C og C++.

Den brug af ampersand er C++ specifik.

locateMsg(test)

og

int locateMsg(int& temp)
{
  temp = 7;
  return 0;
}

virker helt som mit eksempel.

Lidt forsimplet: & i argument-listen virker ligesom *, men man
skal ikke bruge & i kald og * ved brug indeni.
Avatar billede teepee Nybegynder
25. maj 2003 - 18:26 #6
Jeg tror din forsimpling endte med at bliver for simpel, for jeg forstår den ikke :-)
Anyway, du siger at jeg skal holde op med at benytte & og skifte til *, selvom jeg bruger c++?
Avatar billede arne_v Ekspert
25. maj 2003 - 18:33 #7
Hvis man bruger:

int locateMsg(int& temp)

i.s.f.

int locateMsg(int* temp)

så kalder man med:

locateMsg(test)

i.s.f.

locateMsg(&test)

og bruger:

temp = 7;

i.s.f.

*temp = 7;
Avatar billede arne_v Ekspert
25. maj 2003 - 18:35 #8
Og nej det er udmærket at bruge & i C++.

Men da der ikke var noget i det oprindelige spørgsmål som
sagde C++ valgte jeg naturligvis en løsning der virker
både i C og C++.
Avatar billede arne_v Ekspert
25. maj 2003 - 18:36 #9
& er formentlig indført i C++ for at få en nem syntax som
samtidigt er effektiv (det er meget dyrt at sende structs og
ovjects over by value).
Avatar billede arne_v Ekspert
25. maj 2003 - 18:37 #10
objects
Avatar billede arne_v Ekspert
25. maj 2003 - 18:55 #11
De fleste er enige om at syntaxen med & er pænere end den med *,
så det er nok anbefalelses værdigt at bruge den.

Den eneste ulemper er at  man kan overse at kaldet kan ændre variablen
når man læser koden.
Avatar billede teepee Nybegynder
25. maj 2003 - 20:15 #12
Ja, jeg kan godt se, at benytter man sig af "min" løsning, skal man finde frem til funktionen for at se at temp er en IN OUT parameter, hvorimod i "din" løsning, kan man se det dér, hvor man kalder funktionen. Tusind tak for hjælpen... og tak til jakobdo for at lægge point til spørgsmålet som jo blev udviddet lidt ;-) Arne du er bare super. Det er godt, at der er nogle tekkies som dig, der gider at svare på "simple" spørgsmål, der kan få os andre videre i programmet.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester