Czemu to nie działa miał być wynik 9 a wyskakuje 8
#include <stdio.h>
int a = 8;
void zwieksz_liczbe(int a){
a=a+1;
}
int main() {
zwieksz_liczbe(a);
printf("Zmienna 'a' po wywolaniu zwieksz_liczbe = %d\n", a);
return 0;
}
Czemu to nie działa miał być wynik 9 a wyskakuje 8
#include <stdio.h>
int a = 8;
void zwieksz_liczbe(int a){
a=a+1;
}
int main() {
zwieksz_liczbe(a);
printf("Zmienna 'a' po wywolaniu zwieksz_liczbe = %d\n", a);
return 0;
}
Wewnatrz funkcji operujesz na kopii tej zmiennej. Przekaz przez wskaznik (*
).
Lektura na dziś: przekazywanie przez referencję/wskaźnik.
co to znaczy? "Wewnatrz funkcji operujesz na kopii tej zmiennej."
To znaczy że komputer stworzył nową zmienną i przypisał jej wartość tej twojej zmiennej. I na tej nowej zmiennej operujesz wewnątrz funkcji. Ta nowa zmienna jest w zupełnie innym miejscu w pamięci komputera niż ta stara i jej zmiana nijak nie wpływa na tą starą.
To znaczy tyle:
#include <stdio.h>
void foo(int a) {
printf("%p\n", &a);
}
int main(void) {
int a = 3;
printf("%p\n", &a);
foo(a);
return 0;
}
ok dzieki juz wiadomo
Lektura na dziś: przesłanianie zmiennych.
a
wewnątrz funkcji zasłania globalne a
. Twój kod jest równoznaczny z
#include <stdio.h>
int foo = 8;
void zwieksz_liczbe(int bar){
bar=bar+1;
}
int main() {
zwieksz_liczbe(foo);
printf("Zmienna 'a' po wywolaniu zwieksz_liczbe = %d\n", foo);
return 0;
}
Albo przekaż przez wskaźnik (lepiej), albo użyj zmiennej globalnej (gorzej).
Możesz też zrobić tak, aby twoja funkcja zwracała wartość:
#include <stdio.h>
int zwieksz_liczbe(int a){
return a+1;
}
int main() {
int a = 8;
a = zwieksz_liczbe(a);
printf("Zmienna 'a' po wywolaniu zwieksz_liczbe = %d\n", a);
return 0;
}