Pointer v C++
Jan Waclawek
konfera na efton.sk
Pondělí Prosinec 12 15:21:51 CET 2022
Ano, uplne zbytocne som to zamotal. Rozpisujem iny vyraz nez ten co bol v
povodnom priklade.
>3. Toto : *(a++) a zrejme aj toto *a++ inkrementuje pointer a
>zoberie data, *data na povodnom pointri sa nemenia,*
>
Nie.
C99 6.5.2.4 Postfix increment and decrement operators, #2:
The result of the postfix ++ operator is the value of the operand. After
the result is
obtained, the value of the operand is incremented. (That is, the value 1 of
the appropriate
type is added to it.)
To znamena, ze po b = (a++); alebo b = a++; bude b obsahovat hodnotu a pred
inkrementom a a bude obsahovat inkrementnutu hodnotu.
Cize 3. x = *(a++); aj x = *a++; ale aj 4. x = *a; a++; ma rovnaky efekt,
precita sa z adresy hodnota, ulozi sa do x, hodnota na adrese a sa
nezmeni, a sa inkrementuje.
Rozdiel v 3. a 4. vsak skutocne je - v tom, ze ak je a deklarovany ako
volatile (nie smernik na volatile ale volatile smernik) tak sa v pripade
3. cita len raz, v pripade 4. cita dvakrat. Ale to je pomerne zriedkava
vec, aby sa pouzil volatile smernik.
Ten povodny priklad, t.j. 1. a 2., asi neviem zapisat nijako "lepsie".
wek
----- Original Message ---------------
Subject: Re: Pointer v C++
From: "M." <milger na pobox.sk>
Date: Mon, 12 Dec 2022 14:23:46 +0100
To: hw-list na list.hw.cz
>Nooo, to som si nie isty vysledkom " x = *a; a++;"
>
>
>1. Toto : a[0]++ inkrementuje data na pointri "a",
>
>2. Toto : (*a)++ inkrementuje data na pointri "a",
>
>3. Toto : *(a++) a zrejme aj toto *a++ inkrementuje pointer a
>zoberie data, *data na povodnom pointri sa nemenia,*
>
>4. Toto: x = *a; a++; zoberie data do x, inkrementuje pointer,*data na
>povodnom pointri sa nezmenia.*
>
>
>Dalej bolo cielom zobrazit cez printf *zmenene data na pointri* "a",
>teda a[0], alebo *a.
>
>A tak mi pride, ze spravne su len riesenia 1. alebo 2.
>
>
>M.
>
>On 12-Dec-22 12:57, Jan Waclawek wrote:
>> Tak pamatat si precedencie je aj podla mna blbost, ale toto sa da napisat
>> aj x = *a; a++; Teda ja toto konkretne riesim takto.
>>
>> V zlozenych podmienkach striktne zatvorkujem, ale tiez ich niekedy prepisem
>> na seriu podmienok a pomocny boolean. Tie zatvorky niekedy vedia liezt na
>> nervy.
>>
>> wek
>>
>>
>> ----- Original Message ---------------
>>
>> Subject: Re: Pointer v C++
>> From: "M."<milger na pobox.sk>
>> Date: Mon, 12 Dec 2022 12:49:38 +0100
>> To:hw-list na list.hw.cz
>>
>>> ... ani nie tak postreh, iba neschopnost a lenivost si to pamatat. A
>>> preto hodne zatvorkujem.
>>>
>>> A kedze tu som zatvorky nevidel a tym padom som nevedel, tak som si to
>>> pozrel...
>>>
>>> :)
>>>
>>>
>>> M.
>>>
>>> On 12-Dec-22 12:37, Jan Waclawek wrote:
>>>> Aha, rozdiel medzi *a++ a (*a)++... ano to bude ono, dobry postreh!
>>>>
>>>> wek
>>>>
>>>>
>>>> ----- Original Message ---------------
>>>>> Zdravim
>>>>>
>>>>>
>>>>> skuste namiesto *maskedCnt toto (*maskedCnt).
>>>>>
>>>>> Ak to pomoze, vysvetlenie je tu:
>>>>>
>>>>> https://en.cppreference.com/w/cpp/language/operator_precedence
>>>>>
>> _______________________________________________
>> HW-list mailing list - sponsored bywww.HW.cz
>> Hw-list na list.hw.cz
>> http://list.hw.cz/mailman/listinfo/hw-list
Další informace o konferenci Hw-list