3 ms·
> Why does C even have a two member selection operators? Because using `(*ptr).member` everywhere is annoying. There's plenty of times you want or need to have
by ben-schaaf 6y ago
> Why does C even have a two member selection operators?
Because using `(*ptr).member` everywhere is annoying. There's plenty of times you want or need to have direct access to a member rather than always dereferencing a pointer.
- jhallenworld 6y agoptr.member should work here- I mean the compiler knows the left side is a pointer, so it should automatically dereference it.
- beagle3 6y agoC was practically a portable assembler when it was designed, and it was likely helpful for performance reasoning that all indirections were clearly visible.
- abecedarius 6y agoIt's too bad C's pointer-deref operator is prefix instead of postfix. In Pascal it's ^ so you write ptr^.member and there's no special -> operator. Even better, declarations and expressions would read intuitively left-to-right instead of spiraling out through stars on the left and brackets on the right.
- btrask 6y agoIn C you can use [0] for postfix pointer dereferencing.
- abecedarius 6y agoAlas, that's clumsy, and for declarations not possible. I have used it in expressions at times. Here's a variation that seems plausible: make postfix p^ be like C's p[0], and infix p^i like C's p[i]. (With a tighter binding for ^ than C has.)
- Twisol 6y agoSo that's where the lens notation comes from... https://github.com/ekmett/lens/wiki/Examples https://github.com/ekmett/lens/wiki/Examples > ("hello","world")^._2