Kezdőoldal » Számítástechnika » Programozás » Hogy lehet ezt C-ben megoldani?

Hogy lehet ezt C-ben megoldani?

Figyelt kérdés

Kezdő vagyok C-ben, szeretném elérni, hogy egy függvény ne csak lokális változókkal dolgozzon, hanem globális változók értékét is megváltoztassa. Példának vegyük a következőt: Szeretném, ha egy függvény felcserélné a két globális változóban tárolt értéket, ehhez egy lokális változót használva. Íme a forráskód Pascalban, ahol mindez tökéletesen működik:


program proba;

var nr1,nr2:integer;


procedure felcserel(var a,b: integer);

var x:integer;

begin

x:=a;

a:=b;

b:=x;

end;


begin

nr1:=1;

nr2:=21;

felcserel(nr1,nr2);

Writeln('A felcserelt ertekek: ',nr1,' ill. ',nr2);

Readln;

end.


És íme a C forráskód:


#include <stdio.h>

#include <stdlib.h>


void change(int a, int b)

{

int x;

x = a;

a = b;

b = x;

}


int main()

{

int nr1, nr2;

nr1 = 1;

nr2 = 2;

change(nr1, nr2);

printf("The changed numbers are %d and %d\n", nr1, nr2);

system("PAUSE");

return 0;

}



Mindkettő gyönyörűen lefut, ám míg a Pascal program fordított sorrendben írja ki a számokat (először a 21-et, majd az 1-et), addig a C program nem, 1-et, majd 2-t ír ki, a sorrend megfordítása nélkül. Hogy tudnám megoldani ezt a problémát? Valamilyen módon a globális változókra mutató pointerek lennének a megoldás? Köszönöm előre is a válaszokat.



2014. júl. 10. 18:49
 1/6 anonim ***** válasza:
Te a printf-ben a nr1 es a nr2-t iratod ki.
2014. júl. 10. 18:55
Hasznos számodra ez a válasz?
 2/6 A kérdező kommentje:
Igen, amiknek elméletileg már fel kéne legyen cserélve az értéke, és így először a 2-t, majd az 1-et kéne kiadja, de nem, először írja ki az 1-et és azután a 2-t. Mit kéne kiíratnom? A lokális változókat? Legjobb tudomásom szerint azok megszűntek létezni amint a függvény lefutott.
2014. júl. 10. 19:04
 3/6 anonim ***** válasza:
100%

C-ben csak érték szerinti paraméterátadás van.

nr1 és nr2-ről képződik két másolat, amelyek a függvényhívás végén meg is szűnnek, az eredeti változóiddal pedig semmi sem történik.

Valóban pointerekkel tudod megoldani.

void change(int* a, int* b)

{

...

}


int main()

{

...

change(&nr1, &nr2);

...

}

2014. júl. 10. 19:04
Hasznos számodra ez a válasz?
 4/6 A kérdező kommentje:

One More String:


Tökéletesen logikus, amit mondasz, sikerült is megoldanom. Hálás köszönet a segítségért.

2014. júl. 10. 19:27
 5/6 anonim ***** válasza:
Ja,
2014. júl. 12. 19:08
Hasznos számodra ez a válasz?
 6/6 anonim ***** válasza:
jó, ha tudod: a C kódodban nincs globális változó.
2014. júl. 12. 19:08
Hasznos számodra ez a válasz?

További kérdések:




Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!