668
top 32 comments
sorted by: hot top controversial new old
[-] agressivelyPassive@feddit.de 58 points 11 months ago

That's actually a pretty good representation.

[-] SubArcticTundra@lemmy.ml 9 points 11 months ago

I think this graphic should be used on all CS courses from now on

[-] itsJoelleScott@lemmy.world 57 points 11 months ago

H-how did this meme clear up a confusion I have with ** pointers after all these years?

They're just pointer pointers!

Dang, that is so cool C can do that.

[-] AlmightySnoo@lemmy.world 32 points 11 months ago

pointer pointers

wait until you learn about template templates in C++

[-] gravitas_deficiency@sh.itjust.works 16 points 11 months ago

Are the templates in the room with us right now?

[-] shotgun_crab@lemmy.world 19 points 11 months ago* (last edited 9 months ago)

I know a guy who knows a guy who knows a guy

[-] mediocreatbest@lemmy.sdf.org 6 points 11 months ago

If you've never seen this before, I think it's transformative to how you read C/C++ declarations and clearer up a lot of confusion for me when I was learning.

https://cseweb.ucsd.edu/~gbournou/CSE131/rt_lt.rule.html

[-] b1_@kbin.social 2 points 11 months ago* (last edited 11 months ago)

Yeah, and I'm pointing to your pointer pointer and I'm a pointer pointer pointer. Or more accurately but less funny is that I'm pointing to your pointer-to-pointer and I'm a pointer-to-pointer-to-pointer.

[-] dandroid@dandroid.app 43 points 11 months ago

I'm a simple man. I see Anya, I upvote.

[-] AlmightySnoo@lemmy.world 32 points 11 months ago
[-] dandroid@dandroid.app 17 points 11 months ago
[-] AlmightySnoo@lemmy.world 19 points 11 months ago
[-] gravitas_deficiency@sh.itjust.works 7 points 11 months ago

Damn, OP’s on point tonight

[-] clutchmatic@lemmy.world 5 points 11 months ago

No, he is on a pointer to a pointer to a point tonight

[-] Sebito@lemmy.ml 26 points 11 months ago

int** int* interesting

[-] MavTheHack@lemmy.fmhy.ml 14 points 11 months ago

Wait we can have pointers to other pointers? Wouldn't that be redundant?

[-] AlmightySnoo@lemmy.world 32 points 11 months ago

In CUDA, the corresponding malloc cannot return the pointer to the allocated memory as runtime CUDA functions all return error codes instead. So the only way to "return" the pointer then without a return statement is to have a pointer given to that function by address, which means that you'll have a pointer-to-pointer among its arguments.

[-] gravitas_deficiency@sh.itjust.works 10 points 11 months ago

Man, this is the type of interaction I used to love on Reddit, but haven’t seen in ages.

[-] abraham_linksys@sh.itjust.works 5 points 11 months ago

So it's sort of like "proxying" through pointers to enforce memory isolation?

[-] AlmightySnoo@lemmy.world 10 points 11 months ago* (last edited 11 months ago)

I'm not entirely sure what you mean by memory isolation here, but the basic idea is that if you have a pointer to something then you know where it is located in memory and you can write in it, that's the whole idea of passing by address in C.

Now pointers themselves are merely variables. Yes they have a special meaning, they "point" to something and you can dereference them with the * operator, but at the end of the day they're still variables. They have a physical existence in memory or CPU registers, and their content is simply the address to which you want to point. Once you accept this, then the idea of the address of a pointer (ie the location of the variable you're calling "pointer", and not the address it contains) is not strange anymore and you can perfectly have a pointer-to-pointer in order to, among other things, pass pointers by address.

[-] Iridium@lemmy.world 7 points 11 months ago

that’s the whole idea of passing by address in C

Wait stop, so in other languages like C#, when you pass a variable into a function “by reference” is that just passing the pointer to the variable?

Have I been baited into using pointers my whole life?

[-] olorin99@kbin.social 9 points 11 months ago

Yes passing "by reference" is essentially the same as "by pointer" but with some syntactical sugar to make it easier to work with.

[-] pazukaza@lemmy.ml 6 points 11 months ago* (last edited 11 months ago)

In C# it is different.

In C if I give you a pointer to a memory address, you can totally overwrite what is in that memory address, even write a new struct in there. So you're getting a "real" writable memory address. You could even write a different type of structs and break the program. You could tweak specific bytes.

In languages like Java or C# you aren't given a reference to the memory address but a reference to the object. You can only write to the object using it's own interface (methods) but you can't say "I'm going to totally overwrite this memory address with a new object".

If you receive an object in a parameter, let's say a "Person person" object and you do something like "person = new Person();" you didn't really overwrite the memory address. The original person reference that was passed in the parameter is still intact. You can only modify it with something like "person.setName(...)".

So, with real pointers you can do more stuff, but higher level languages don't want you to do that because it breaks some of their principles for what "good programming" is. In this case they are protecting encapsulation. You shouldn't be able to mess around with the memory contents of objects directly, only through their interfaces. Encapsulation is safer because objects should expose how to operate them safely via their interfaces.

[-] IHeartBadCode@kbin.social 9 points 11 months ago

char**

So that you can have an array of strings. It's useful to remember that in C arrays and pointers are exactly the same thing, just syntax sugar for however you want to look at it. There are a few exceptions where this isn't true however:

  1. Argument of the & operator
  2. Argument of sizeof
  3. C11 has alignof which decay is a no-no
  4. When it's a string literal of char[] or wide literal of wchar_t[], so like char str[] = "yo mama";

But int** is just an array of int*, which likewise int* can just be an array of int. In the picture here, we have int** anya that is an array of int* with a size of 1, int* anya that is an array of int with a size of 1, and then of course our int there being pointed to by int* anya.

[-] pazukaza@lemmy.ml 9 points 11 months ago

I guess this is beating a dead horse but you can have pointers to pointers for 2D arrays.

The first pointer tells you which coulm you're on. The second pointer tells you which is the first object of each column. That way you can iterate the columns without loosing a reference to the current column you're standing on.

[-] MiddleKnight@discuss.tchncs.de 8 points 11 months ago

Why would it be redundant? You can’t even get past the main function before dealing with a char**

[-] curioushom@lemmy.one 7 points 11 months ago

Quick example in straight C would be a cell in a matrix. The first pointer points to the row and the second pointer points to the cell in that row. This is am over simplification.

[-] h3ndrik@feddit.de 3 points 11 months ago* (last edited 11 months ago)

Not at all. In the picture above, the girl would be saying: "She knows where it is." This concept is used often in real life and in programming.

[-] ShroOmeric@lemmy.world 10 points 11 months ago

This is why I follow communiities like this: I can learn a lot by just reading the comments on a meme. Amazing.

[-] ramplay@lemmy.ca 6 points 11 months ago

Now someone augment it to show what happens when we dereference the pointer.

Even better derefencing a pointer that isn't pointing at anything

[-] PeWu@lemmy.ml 1 points 11 months ago

Okay, all is good, but WHY do we need double, triple level pointers? I get that single level pointers are helpful for security of program, and also hermetization (don't know if this word actually exists).

load more comments
view more: next ›
this post was submitted on 13 Jul 2023
668 points (96.6% liked)

Programmer Humor

31223 readers
51 users here now

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

Rules:

founded 4 years ago
MODERATORS