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