Autor Wiadomość
Ricko
PostWysłany: Sob 17:00, 11 Gru 2010    Temat postu: Język C++ Przekazywanie Parametrów Funkcji

PRZEKAZYWANIE PRZEZ WARTOŚĆ

Cytat:
#include <stdio.h>
#include <conio.h>

void zmien(int a)
{
a=a+5;
printf("%s %d \n","Zmienna a wewnatrz funkcji",a);
}

int main ()
{
int a=5;
printf("%s %d \n","Zmienna a przed funkcja ",a);
zmien(a);
printf("%s %d \n","Zmienna a po wyjsciu z funkcji",a);
getch();
return 0;
}


Wynik działania:
Cytat:
Zmienna a przed funkcja 5
Zmienna a wewnatrz funkcji 10
Zmienna a po wyjsciu z funkcji 5


Komentarz:
Cytat:
W momencie wywoływania funkcji jest stworzona na jej potrzeby zmienna lokalna o podanej nazwie
i do niej kopiowana jest wartość przekazana funkcji.Po zakończeniu działania funkcji zmienne powiązane z argumentami przekazanymi do funkcji przestają istnieć.Po wyjściu z funkcji odwołujemy się do oryginalnej zmiennej która nie została zmodyfikowana

_____________________________________________________________

REFERENCJA


Cytat:
#include <stdio.h>
#include <conio.h>

void zmien(int &a)
{
a=a+5;
printf("%s %d \n","Zmienna a wewnatrz funkcji Zmien",a);
}

int main ()
{
int a=5;
printf("%s %d \n","Zmienna a przed funkcja ",a);
zmien(a);
printf("%s %d \n","Zmienna a po wyjsciu z funkcji 'Zmien' ",a);
getch();
return 0;
}


Wynik Działania:
Cytat:
Zmienna a przed funkcja 5
Zmienna a wewnatrz funkcji 10
Zmienna a po wyjsciu z funkcji 10


Komentarz:
Cytat:
Za pomocą znaku & umieszczonego przed nazwa zmiennej odwołujemy się bezpośrednio do adresu pamięci pod którym zmienna jest przechowywana.Wszystkie operacje będą wiec wykonywane na oryginalnej zmiennej, a nie na zmiennej, która została powołana tylko na czas działania funkcji. Po wyjściu zmiany zostały zachowane.

_____________________________________________________________

PRZEKAZYWANIE PRZEZ WARTOŚĆ - PRAKTYCZNE ZASTOSOWANIE

Cytat:
#include <iostream>
#include <cstdio>
using namespace std;

void suma (int a , int b)
{
a=a+b;
b--;
}

int main ()
{
int a=1,b=2,x;
suma (a,b); /* Zgodnie z funkcją a=1+2=3 b=2-1=1, jesli dodawanie byloby zawarte w funkcji lub występowałaby referencja to x=3+1=4 */
x=a+b; /* W tym programie nie ma jednak referencji, wiec dodawanie odbywa się na zmiennych globalnych, a nie lokalnych z funkcji SUMA, zatem x=1+2=3 */
cout<<"x rowna sie "<<x<<endl;
getchar();
return 0;
}


Wynik:
Cytat:
x równa się 3


Komentarz:
Cytat:
W programie mamy podane dwie zmienne a=1, b=2, zawartą mamy też funkcję, która określa a jako sumę a i b (a=a-b), a także zmniejsza b o 1 (b--). Nie ma tu jednak referencji, więc to co się dzieje w funkcji nie oddziaływuje na działanie programu głównego, zatem dodajemy zmienne bez modyfikacji zawartej w funkcji (a=a+b; b--) czyli 1 i 2 (x=1+2=3)

_____________________________________________________________

REFERENCJA - ZASTOSOWANIE PRAKTYCZNE

Cytat:

#include <iostream>
#include <cstdio>
using namespace std;

void suma (int & a , int & b)
{
a=a+b;
b--;
}

int main ()
{
int a=1,b=2,x;
suma (a,b); /* a=1+2=3 b=2-1=1 */
x=a+b; /*Program ten posiada referencje, zatem wszystko odbywa się na tych samych zmiennych
i w programie głównym i w funkcji, stąd pobierane są dane z funkcji a=3 i b=1 x=3+1=4*/
cout<<"x wynosi "<<x<<endl;
getchar();
return 0;
}


Wynik:
Cytat:
x wynosi 4


Komentarz:
Cytat:
W programie zawarta jest referencja, przez co wszystkie operacje wykonywane są na oryginalnej zmiennej. Zmienne są modyfikowane przez operacje z funkcji, przez co ich suma jest inna, niż ta gdy nie było referencji

_____________________________________________________________
źródło: Programy Dadacza - forum inf.zabrze.pl

Powered by phpBB © 2001,2002 phpBB Group