Ricko |
Wysł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:
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:
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 |
|