this post was submitted on 09 May 2024
458 points (92.4% liked)

Programmer Humor

32718 readers
378 users here now

Post funny things about programming here! (Or just rant about your favourite programming language.)

Rules:

founded 5 years ago
MODERATORS
 
you are viewing a single comment's thread
view the rest of the comments
[–] [email protected] 39 points 7 months ago (4 children)

I didn't know why, but *++p bugs me

[–] [email protected] 29 points 7 months ago* (last edited 7 months ago) (2 children)

Perhaps *(p += 1) will be to your liking?

[–] [email protected] 15 points 7 months ago (2 children)

Much better... but can we make it *((void*)(p = p + 1))?

[–] [email protected] 16 points 7 months ago

How about some JavaScript p+=[]**[]?

[–] [email protected] 3 points 7 months ago (1 children)

Why are you casting to void*? How is the compiler supposed to know the size of the data you are dereferencing?

[–] [email protected] 3 points 7 months ago* (last edited 7 months ago)

This would probably cause a compiler error....

But assuming it doesn't the context is p_ch = the bits above... the code declaring p_ch isn't shown but I'm guessing that the value here is actuality a pointer to a pointer so nothing illegal would be happening.

Lastly... C++ is really lacking in guarantees so you can assign a char to the first byte of an integer - C++ doesn't generally care what you do unless you go out of bounds.

The reason I'm casting to void* is just pure comedy.

[–] [email protected] 11 points 7 months ago* (last edited 7 months ago) (2 children)
p = 1

x = ++p
// x = 2
// p = 2
p = 1
x  = p++
// x = 1
// p = 2

++p will increase the value and return the new value

p++ will increase the value and return the old value

I think p = p + 1 is the same as p++ and not as ++p. No?

[–] [email protected] 10 points 7 months ago* (last edited 7 months ago) (1 children)

In C an assignment is an expression where the value is the new value of what was being assigned to.

In a = b = 1, both a and b will be 1.

a = *(p = p + 1)

is the same as

p += 1
a = *p

, so ++p.

[–] [email protected] 1 points 7 months ago

What I meant was:

In the screenshot it said x = *(++p) and iirc that is not the same as saying x = *(p++) or x = *(p += 1)

As in my example using ++p will return the new value after increment and p++ or p+=1 will return the value before the increment happens, and then increment the variable.

Or at least that is how I remember it working based on other languages.

I'm not sure what the * does, but I'm assuming it might be a pointer reference? I've never really learned how to code in c or c++ specifically. Though in other languages ( like PHP which is based on C ) there is a distinct difference between ++p and (p++ or p+= 1)

The last two behave the same. Though it has been years since I did a lot of coding. Which is why I asked.

I'll install the latest PHP runtime tonight and give it a try xD

[–] [email protected] 3 points 7 months ago* (last edited 7 months ago) (1 children)

(p += 1) resolves to the value of p after the incrementation, as does ( p = p + 1).

[–] [email protected] 2 points 7 months ago (1 children)

Yes.

p++ == p+= 1 == p = p + 1 are all the same if you use it in an assignment.

++p is different if you use it in an assignment. If it's in its own line it won't make much difference.

That's the point I was trying to make.

[–] [email protected] 5 points 7 months ago (1 children)

No.

++p returns incremented p.

p += 1 returns incremented p.

p = p + 1 returns incremented p.

p++ returns p before it is incremented.

[–] [email protected] 3 points 7 months ago

Right. So i had them the other way around. :D

Thanks for clarifying.

[–] [email protected] 13 points 7 months ago
[–] [email protected] 8 points 7 months ago* (last edited 7 months ago) (1 children)

That *++ operator from C is indeed confusing.

Reminds me of the goes-to operator: --> that you can use as:

while(i --> 0) {
[–] [email protected] 15 points 7 months ago (2 children)

That's not a real operator. You've put a space in "i--" and removed the space in "-- >". The statement is "while i-- is greater than zero". Inventing an unnecessary "goes to" operator just confuses beginners and adds something else to think about while debugging.

And yes I have seen beginners try to use <-- and --<. Just stop it.

[–] [email protected] 1 points 7 months ago

The sheer number of people that do not expect a joke on this community... (Really, if you are trying to learn how to program pay attention to the one without the Humor on the name, not here.)

Well, I guess nobody expects.

[–] [email protected] 1 points 7 months ago

Where do you think we are?