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

Czy jest różnica między *wsk++ a *wsk = *wsk + 1?

Cloud VPS
0 głosów
767 wizyt
pytanie zadane 12 czerwca 2018 w C i C++ przez Agnes Użytkownik (990 p.)
Jak w temacie. Mojej niedoedukowanej osobie wydaje się, że to jest to samo.

2 odpowiedzi

+1 głos
odpowiedź 12 czerwca 2018 przez niezalogowany
edycja 12 czerwca 2018

W jednym przypadku miałabyś inkrementację wartości wskaźnika, czyli zmianę jego wartości o 1, a w drugim pobranie wartości, ale o 1 większej bez jej zmiany:

Poprawiony kod:

#include <iostream>

void log(int value) {
	std::cout << value << "\n";
}

int main() {
	int* post = new int(0);
	int* pre = new int(0);
	int* wsk3 = new int(0);

	log(*post);
	log(*pre);
	log(*wsk3);

	std::cout << "\n";

	log((*post)++); // postinkrementacja
	log(++(*pre)); // preinkrementacja
	log(*wsk3 = *wsk3 + 1);

	std::cout << "\n";

	log(*post);
	log(*pre);
	log(*wsk3);

	delete post;
	delete pre;
	delete wsk3;
}

 

komentarz 12 czerwca 2018 przez 0e85dc6eaf Dyskutant (8,840 p.)

Ale przecież w pytaniu jest

*wsk = *wsk + 1

Odpowiedź Wiciornego jest poprawna
 

komentarz 12 czerwca 2018 przez niezalogowany

O faktycznie pisząc odpowiedz miałem w głowie tylko *wsk++ a *wsk + 1. Dziękuje za zwrócenie uwagi ;)

komentarz 12 czerwca 2018 przez Agnes Użytkownik (990 p.)
Jesteście pewni? Napisanie w sprawozdaniu, że między tymi dwoma zapisami nie ma w praktyce różnicy odjęło mi chyba dwa punkty od ich maksymalnej ilości za całe sprawozdanie... Więc może  coś jednak jest na rzeczy.
komentarz 12 czerwca 2018 przez niezalogowany
No właśnie jest różnica (w poprawionym kodzie widać) - jedno to postinkrementacja, a drugie to preinkrementacja.
komentarz 12 czerwca 2018 przez 0e85dc6eaf Dyskutant (8,840 p.)
edycja 12 czerwca 2018 przez 0e85dc6eaf

@Agnes, A może chodzi o to, że napisałeś *wsk++ zamiast (*wsk)++? Wtedy to faktycznie zadziała inaczej.

Jeśli jednak chodzi o (*wsk)++ vs *wsk = *wsk + 1 tak jak początkowo zakładaliśmy to różnicy nie ma żadnej (przynajmniej przy kompilacji g++ z flagami O0 i 02)

(chyba, że używasz tego jako na przykład argumentu funkcji tak jak w programie Hipcia, ale wtedy to nie jest problem wskaźników tylko postinkrementacji)

–1 głos
odpowiedź 12 czerwca 2018 przez Wiciorny Ekspert (281,530 p.)

Zależy: generalnie nie ma róznicy jeśli chodzi "o rezultat", ale :) zapis numer dwa 

*wsk = *wsk +1;

jest mało praktyczny i łatwiej zrozumieć jest postinkrementację, 

Podobne pytania

+1 głos
2 odpowiedzi 1,156 wizyt
0 głosów
1 odpowiedź 362 wizyt
0 głosów
1 odpowiedź 451 wizyt
pytanie zadane 29 listopada 2018 w C i C++ przez ciocialol Nowicjusz (180 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
...