Hogy lehet ezt C-ben megoldani?
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.
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);
...
}
One More String:
Tökéletesen logikus, amit mondasz, sikerült is megoldanom. Hálás köszönet a segítségért.
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
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!