Błędny wynik przy zwiększaniu liczby o 1

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;
}
1

Wewnatrz funkcji operujesz na kopii tej zmiennej. Przekaz przez wskaznik (*).

0

Lektura na dziś: przekazywanie przez referencję/wskaźnik.

0

co to znaczy? "Wewnatrz funkcji operujesz na kopii tej zmiennej."

0

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ą.

0

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;
}

http://ideone.com/rWLZdT

0

ok dzieki juz wiadomo

0

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).

2

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;
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1