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.
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
You are not logged in. However you can subscribe from another Fediverse account, for example Lemmy or Mastodon. To do this, paste the following into the search field of your instance: !programmerhumor@lemmy.ml
Post funny things about programming here! (Or just rant about your favourite programming language.)
Rules:
Posts must be relevant to programming, programmers, or computer science.
No NSFW content.
Jokes must be in good taste. No hate speech, bigotry, etc.
Perhaps *(p += 1) will be to your liking?
Much better… but can we make it
*((void*)(p = p + 1))
?How about some JavaScript
p+=[]**[]
?Why are you casting to
void*
? How is the compiler supposed to know the size of the data you are dereferencing?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.
++p
will increase the value and return the new valuep++
will increase the value and return the old valueI think
p = p + 1
is the same asp++
and not as++p
. No?(p += 1) resolves to the value of p after the incrementation, as does ( p = p + 1).
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.
No.
++p returns incremented p.
p += 1 returns incremented p.
p = p + 1 returns incremented p.
p++ returns p before it is incremented.
Right. So i had them the other way around. :D
Thanks for clarifying.
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.is the same as
, so ++p.
What I meant was:
In the screenshot it said
x = *(++p)
and iirc that is not the same as sayingx = *(p++)
orx = *(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++
orp+= 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