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

Object Storage Arubacloud
0 głosów
611 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 (269,790 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 879 wizyt
0 głosów
1 odpowiedź 315 wizyt
0 głosów
1 odpowiedź 334 wizyt
pytanie zadane 29 listopada 2018 w C i C++ przez ciocialol Nowicjusz (180 p.)

92,568 zapytań

141,420 odpowiedzi

319,624 komentarzy

61,956 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

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

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!

...