Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
menu search
person
Welcome To Ask or Share your Answers For Others

Categories

Suppose a and b are pointers,

My understanding is *--a = *--b means subtract 1 from a and b using pointer arithmetic, then dereference a and b and set them equal.

Is this equivalent to

--a;
--b;
*a=*b

Similarly, what is

*a++ = *b++;

equivalent to?

question from:https://stackoverflow.com/questions/65858987/what-does-a-b-mean-in-c

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
473 views
Welcome To Ask or Share your Answers For Others

1 Answer

*––a = *––b 

is logically equivalent to

tmpa = a - 1
tmpb = b - 1
*tmpa = *tmpb
a = a - 1
b = b - 1

with the caveat that the updates to a, b, and *tmpa can occur in any order, and those updates can even be interleaved. It’s also possible for the implementation to skip the temporaries and update the pointer values immediately:

a = a - 1
b = b - 1
*a = *b

but that’s not required or guaranteed. Similarly,

*a++ = *b++

is logically equivalent to

tmpa = a
tmpb = b
*tmpa = *tmpb
a = a + 1
b = b + 1

with the same caveats about the ordering of the updates to a, b, and *tmpa. Again, the implementation may skip using temporaries and evaluate it as

*a = *b
a = a + 1
b = b + 1

but again that’s neither required nor guaranteed.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
...