[C] zamiana argumentów, wskaźniki

kalwi
Użytkownik
Użytkownik
Posty: 1931
Rejestracja: 29 maja 2009, o 11:58
Płeć: Mężczyzna
Lokalizacja: Warszawa
Podziękował: 145 razy
Pomógł: 320 razy

[C] zamiana argumentów, wskaźniki

Post autor: kalwi »

Witam, mam problem z rozwiązaniem pewnego przykładu. Program ma zamieniać wartości x i y, trzeba tu wprowadzić poprawkę. średnio rozumiem jeszcze wskaźniki, a trzeba będzie ich tu użyc. Proszę o jakąś podpowiedź.

Kod: Zaznacz cały

#include <stdio.h>

void zamiana(int* a, int* b){
	a = b;
	b = a;
}

int main() {
	int x = 3, y = 4;
	
        printf("Before
");
	printf("x = %2i, y = %2i
", x, y);

	zamiana(x, y);

	printf("After
");
	printf("x = %2d, y = %2d
", x, y);

	return 0;
}
jarek4700
Użytkownik
Użytkownik
Posty: 939
Rejestracja: 26 gru 2009, o 17:38
Płeć: Mężczyzna
Lokalizacja: Mazowsze
Podziękował: 5 razy
Pomógł: 228 razy

[C] zamiana argumentów, wskaźniki

Post autor: jarek4700 »

To nie będzie działać bo zobacz że jak do \(\displaystyle{ a}\) przypisujesz \(\displaystyle{ b}\) to potem w \(\displaystyle{ a}\) już siedzi to \(\displaystyle{ b}\) więc \(\displaystyle{ a}\) zostało jakby skasowane i następne przypisanie na pewno nie zrobi tego o co Ci chodziło - trzeba tymczasowo wykorzystać trzeci wskaźnik.
Ser Cubus
Użytkownik
Użytkownik
Posty: 1406
Rejestracja: 6 maja 2012, o 22:46
Płeć: Mężczyzna
Lokalizacja: Polska
Podziękował: 107 razy
Pomógł: 145 razy

[C] zamiana argumentów, wskaźniki

Post autor: Ser Cubus »

Kod: Zaznacz cały

void zamiana(int* a, int* b){
   int tmp = *a;
   *a = *b;
   *b = tmp;
}
kalwi
Użytkownik
Użytkownik
Posty: 1931
Rejestracja: 29 maja 2009, o 11:58
Płeć: Mężczyzna
Lokalizacja: Warszawa
Podziękował: 145 razy
Pomógł: 320 razy

[C] zamiana argumentów, wskaźniki

Post autor: kalwi »

Ser Cubus, kompiluje się, ale po wyświetleniu pierwszego printfa (before
x=3 y=4) wyskakuje program.exe has stopped working

w debugurze jest
Program received signal SIGSEGV, Segmentation fault.
m-2
Użytkownik
Użytkownik
Posty: 55
Rejestracja: 4 maja 2011, o 13:37
Płeć: Mężczyzna
Podziękował: 2 razy
Pomógł: 14 razy

[C] zamiana argumentów, wskaźniki

Post autor: m-2 »

zamień

Kod: Zaznacz cały

zamiana(x, y);
na

Kod: Zaznacz cały

zamiana(&x, &y);
kalwi
Użytkownik
Użytkownik
Posty: 1931
Rejestracja: 29 maja 2009, o 11:58
Płeć: Mężczyzna
Lokalizacja: Warszawa
Podziękował: 145 razy
Pomógł: 320 razy

[C] zamiana argumentów, wskaźniki

Post autor: kalwi »

działa : )
wielkie dzięki
ODPOWIEDZ