• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Wskaźniki, problem z interpretacją

Cloud VPS
0 głosów
334 wizyt
pytanie zadane 21 marca 2018 w C i C++ przez Saddre Nowicjusz (240 p.)

Utwórz dwie liczby całkowite, porównaj ich adresy, a następnie je zamień przy wykorzystaniu wskazników.

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

	void funkcja(int *a, int *b)
	{
	int zmiana = *a; 
	*a = *b;
	*b = zmiana;
	}
	int main()
	{
	int a = 5, b = 2;
	int *adresA = &a, *adresB = &b;
	printf("a= %d\nb= %d\n", *adresA, *adresB);
	funkcja(adresA, adresB);
	printf("zmiana\n");
	printf("a= %d\nb= %d\n", *adresA, *adresB);

	_getch();
	return 0;
	}

Nie wiem czy dokładnie to miał na myśli autor zadania. 

2 odpowiedzi

0 głosów
odpowiedź 22 marca 2018 przez Bondrusiek Maniak (61,440 p.)

Witam,

wszystko jest w porządku ale zapomniałeś dodać warunek, który porównuje adresy wskaźników

Utwórz dwie liczby całkowite, porównaj ich adresy, a następnie je zamień przy wykorzystaniu wskazników.

 

    void funkcja(int *a, int *b)
    {
        if(a != b) // jeśli adresy wskaźników są różne dokonaj podmiany
        {
    int zmiana = *a;
    *a = *b;
    *b = zmiana;
        }
    }

 

komentarz 22 marca 2018 przez damianeqe Gaduła (4,380 p.)
Zgadzam się, ale w poleceniu nie ma napisane że jeżeli adresy są różne to je zamień, a jeżeli takie same to nie zamieniaj. Masz sprawdzić adresy, a później nie ważne co się stanie == lub != masz zamienić ich adresy.
0 głosów
odpowiedź 22 marca 2018 przez Beginer Pasjonat (22,110 p.)

Moim zdaniem bardziej odpowiedni (lub co najmniej równoważny) byłby zapis funkcji void w postaci:



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

Warto również zwrócić uwagę, że do wyświetlenia zmiennych autor użył dereferencji wskażnika.

komentarz 22 marca 2018 przez Qwerty96 Stary wyjadacz (13,580 p.)
To nie jest "bardziej odpowiedni zapis". Co więcej ta funkcja nie działa dobrze.
komentarz 22 marca 2018 przez Beginer Pasjonat (22,110 p.)
Sorry, masz rację. Nie miałem pod ręką komputera, nie mogłem sprawdzić w działaniu. (Tak mi podpowiadała intuicja).
komentarz 27 marca 2018 przez Paweł Dymek Bywalec (2,300 p.)

@Beginer, według mojej interpretacji powinieneś jednak  zamienić adresy tak jak Qwerty96 sugeruje. 

 

Utwórz dwie liczby całkowite, porównaj ich adresy, a następnie je zamień przy wykorzystaniu wskazników.

No chyba, że autor chciał napisać:

Utwórz dwie liczby całkowite, porównaj ich adresy, a następnie zamień te liczby przy wykorzystaniu wskazników.

Utworzyć to można zmienne a nie liczby a potem zamienić ich wartość a nie je.

Treść zadania niejednoznaczna, ale według polszczyzny "je" tyczy się tu adresów, bo jest to podmiot występujący bezpośrednio przed, a ponadto "porównaj ich adresy, a następnie je zamień", słowo klucz 'a następnie' sugeruje zamianę adresów. 

Podobne pytania

0 głosów
1 odpowiedź 106 wizyt
pytanie zadane 9 kwietnia 2020 w C i C++ przez XiverKi Bywalec (2,050 p.)
0 głosów
1 odpowiedź 762 wizyt
pytanie zadane 29 stycznia 2019 w C i C++ przez Giero112 Nowicjusz (170 p.)
+1 głos
2 odpowiedzi 545 wizyt
pytanie zadane 8 stycznia 2016 w C i C++ przez Wojtek Brzeziński Nowicjusz (170 p.)

93,483 zapytań

142,417 odpowiedzi

322,763 komentarzy

62,895 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Kursy INF.02 i INF.03
...