Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
527 views
in Technique[技术] by (71.8m points)

operator precedence - What does *--a = *--b mean in C

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

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

1 Reply

0 votes
by (71.8m points)
*––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.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...