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

Preinkrementacja oraz postinkrementacja. Jak dokładnie to działa?

Object Storage Arubacloud
+1 głos
4,155 wizyt
pytanie zadane 25 czerwca 2015 w C i C++ przez demo094 Użytkownik (630 p.)
Mam następujący program:
int t[4]={2,5,-4,-3}, *p;
p=t+2;
p++;
printf("%d\t %d\t %d\t %d\t %d\t", 2**p, 2**t+4, 2**(t+1), 4*(*p+2), p-t);

Dlaczego wskaźnik się najpierw przesunął o pozycje dalej a nie dopiero po użyciu? Macie jakieś dobre źródła żeby zrozumieć post i preinkrementacje? Mam z tym częsty problem.

2 odpowiedzi

+1 głos
odpowiedź 25 czerwca 2015 przez Surykat Stary wyjadacz (14,780 p.)
wybrane 25 czerwca 2015 przez demo094
 
Najlepsza

Preinkrementacja zwiększa tą wartość jeszcze w tej samej linii, przed średnikiem. Postinkrementacja wykonuje się dopiero po "przejsciu przez średnik", czyli do następnej instrukcji. 

Przykład:

 

int a = 0;
cout<<a++; // Na ekranie pokaże się 0
cout<<a;   //na ekranie pokaże się 1

 

Drugi przykład:

 

int a = 0;
cout<<++a; //Na ekranie już w tym miejscu pokaże się 1

 

komentarz 25 czerwca 2015 przez demo094 Użytkownik (630 p.)
Dziękuję, wreszcie to jest jasne!
komentarz 25 czerwca 2015 przez Surykat Stary wyjadacz (14,780 p.)
Prosze cię bardzo. :)
+3 głosów
odpowiedź 25 czerwca 2015 przez Radfler VIP (101,030 p.)
edycja 21 lutego 2018 przez Radfler

Spróbuję wyjaśnić:

1. Preinkrementacja (pre -> przed) wartość zostanie zwiększona i od razu podstawiona, przykład:

int x = 0;
std::cout << ++x;

Wyświetlone zostanie 1 (podstawione od razu).

2. Postinkrementacja (post -> po) wartość zostanie zwiększona, ale zostanie podstawiona stara wartość, przykład:

int x = 0;
std::cout << x++ << '\n';
std::cout << x;

W pierwszej linijce pojawi się 0, ale wartość została już zwiększona. Widać to w następnej linijce, gdzie zostanie wyświelone 1.

Tu jeszcze inne wyjaśnienie: http://www.programowanie.darmowefora.pl/?topic=51.0

komentarz 25 czerwca 2015 przez demo094 Użytkownik (630 p.)
edycja 25 czerwca 2015 przez demo094
Przepraszam bardzo, ale ciągle nie rozumiem dlaczego w takim wypadku w moim programie zmienna najpierw się przesunęła a nie dopiero po printf. Wybacz jeżeli to pytanie jest banalne.
Przedstawię jak ja to rozumiem:
1. do wskaźnika p wstaw wartość -4 (t[2])
2. następnie podstaw starą wartość do działania(printf) a następnie przesuń wskaźnik na następną pozycje (t[3])

Tak się nie dzieję tylko wskaźnik od razu przechodzi do t[3].
EDIT: Dziękuję za pomoc, wszystko jest jasne.
komentarz 25 czerwca 2015 przez Radfler VIP (101,030 p.)
edycja 26 lutego 2018 przez Radfler

Nie wiem czy o to Ci chodzi, ale wygląda to tak:

int t[4] = {2, 5, -4, -3}, *p;
p = t+2;
p++;
printf("%d\t %d\t %d\t %d\t %d\t", 2**p, 2**t+4, 2**(t+1), 4*(*p+2), p-t);

W 3 linijce zwiększasz wskaźnik, co oznacza:

1. W tym miejscu zostanie podstawiona stara wartość tego wskaźnika, a ty nic z tą wartością nie robisz (po prostu zwiększasz wskaźnik, nic więcej),

2. Przy wywołaniu printf wskaźnik już wskazuje na element t[3].

O to chodzi?

Podobne pytania

0 głosów
1 odpowiedź 244 wizyt
pytanie zadane 25 września 2019 w C i C++ przez Xenon02 Nowicjusz (190 p.)
+1 głos
3 odpowiedzi 468 wizyt
pytanie zadane 15 sierpnia 2016 w C i C++ przez Kosmaty205 Początkujący (340 p.)
0 głosów
0 odpowiedzi 323 wizyt
pytanie zadane 6 kwietnia 2022 w C i C++ przez trampek Nowicjusz (120 p.)

92,566 zapytań

141,420 odpowiedzi

319,615 komentarzy

61,952 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!

...