• 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?

VPS Starter Arubacloud
0 głosów
635 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 (275,470 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 929 wizyt
0 głosów
1 odpowiedź 328 wizyt
0 głosów
1 odpowiedź 379 wizyt
pytanie zadane 29 listopada 2018 w C i C++ przez ciocialol Nowicjusz (180 p.)

92,830 zapytań

141,771 odpowiedzi

320,817 komentarzy

62,159 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.

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...