6 ms·
I can agree on that. The point I was trying to make is that &x would return a number not an assignable memory location. The reason it isn't an lvalue is becau
by denniskubes 13y ago
I can agree on that.
The point I was trying to make is that &x would return a number not an assignable memory location. The reason it isn't an lvalue is because it doesn't return a memory address the way a variable assignment or dereference would.
I was probably a bit confusing in what I was trying to say.
- JoshTriplett 13y agoIt absolutely does return a memory address; it even has the type of a memory address ("int *"). You just can't write to it because it doesn't live in a writable location (an lvalue), for the same reason you can't write: (x + 1) = 12 because (x+1) doesn't live in a writable location.
- mikeash 13y agoIt is quite confusing, because it implies that this is equivalent and equivalently wouldn't work: int *ptr = &x; ptr = 20; The rvalue/lvalue distinction is completely unrelated to pointers, holding memory addresses versus numbers representing memory addresses, etc. The & operator simply doesn't give you an lvalue, like most operators in C, and this has nothing to do with addresses, pointers, or anything of the like
- denniskubes 13y agoAfter rereading it a couple times I think you and others were right. I was trying to say something that in the end muddied issue. I have removed the section on r-value and l-values.