Explaining Pointers Until I Go Insane

Поделиться
HTML-код
  • Опубликовано: 19 апр 2024
  • To try everything Brilliant has to offer-free-for a full 30 days, visit brilliant.org/Mults . You’ll also get 20% off an annual premium subscription.
    Hello there! I've been wanting to talk about quirky pointers for a while. They make no sense sometimes.
    Music used in the video:
    - Sewer surfing: • TMNT 4 (SNES) Music: S...
    - Flower garden: • Yoshi's Island OST - F...
    - Vordt of the Boreal Valley: • Vordt of the Boreal Va...
    - Pizza Parlor: • Club Penguin - Pizza P...
    - Figure-8 Circuit: • Mario Kart DS Music - ...
    - Mii Channel Theme: • Nintendo Wii - Mii Cha...
    - The Cyber Sleuth: • The Cyber Sleuth - Dig...
    - Bad Bully: • Kizumonogatari II ost ...
    - Wii Sports - Title: • Wii Sports - Title (HQ)
    - Spark Mandrill: • Mega Man X OST - Spark...
    - Hope Ster: • Hope Ster - Digimon St...
    - Flame Mammoth: • Megaman X - Flame Mamm...
    - Alleycat Blues: • TMNT 4 (SNES) Music: A...
    - Listen!!: • K-ON! - Listen!! Instr...
    - Going Up: • TMNT 4 (SNES) Music: G...
    - Still, Move Forward: • Still, Move Forward! (...
    - Royal Knights: • Royal Knights - Digimo...
    - A Dish is Best Served Cold: • Tee Lopes - A Dish Bes...
    - ミカヅキBIGWAVE -Emotional Prism 感情的なプリズム: • ミカヅキBIGWAVE - Emotiona...
    This video was sponsored by Brilliant.
    #Mults
  • РазвлеченияРазвлечения

Комментарии • 653

  • @MultsElMesco
    @MultsElMesco  Месяц назад +79

    Hello everyone! I've been doing some mix and match with my content style lately. Just trying new things. Let me know what you think :)
    To try everything Brilliant has to offer-free-for a full 30 days, visit brilliant.org/Mults
    You’ll also get 20% off an annual premium subscription.

    • @mxblock
      @mxblock Месяц назад +3

      Not a regular viewer (yet), but -
      This right here is literally a master piece for me. Educational, something interesting, memes (not to in you'r face / loud audio - still prominent to be entertaining), relatability, the ever growing crazieness, straight to the point, not to short nor to long, right volume for music and mic, the outro song - all just perfect. Keep it up!

    • @NeostormXLMAX
      @NeostormXLMAX Месяц назад +1

      I recognize that digimon cybersleuth ost

  • @tuhkiscgibin6627
    @tuhkiscgibin6627 Месяц назад +1762

    If a codebase has any of this stuff, you'll know it's been backdoored.

    • @atomgutan8064
      @atomgutan8064 Месяц назад +178

      lol exactly. this is extreme obfuscation

    • @tuhkiscgibin6627
      @tuhkiscgibin6627 Месяц назад +100

      @@atomgutan8064Some Jia Tan shit

    • @atomgutan8064
      @atomgutan8064 Месяц назад

      @@tuhkiscgibin6627 lmao this is the new backdoor reference now ig

    • @avoavoavo
      @avoavoavo Месяц назад +42

      Once committed, always committed. No explanation is needed. It works.

    • @tosemusername
      @tosemusername Месяц назад +26

      Well, the person who backdoored it understood it, so jokes on you :P

  • @Spitfire720
    @Spitfire720 Месяц назад +1289

    Aight I'm never listening to the word "pointer" again

    • @deltamico
      @deltamico Месяц назад +33

      "pointer"
      You can read it instead. You're welcome

    • @nodrance
      @nodrance Месяц назад

      I point on her... Wait

    • @deleteddeleted1940
      @deleteddeleted1940 Месяц назад +3

      learn about references!

    • @jeremymcadams7743
      @jeremymcadams7743 Месяц назад +8

      Let me give you a few pointers about how to get over this issue

    • @mux1c
      @mux1c Месяц назад +1

      I'd like your comment, but it's at 911 and I can't ruin that

  • @vulnoryx
    @vulnoryx Месяц назад +695

    "say pointer again"
    "fuck you"

    • @user-qr4jf4tv2x
      @user-qr4jf4tv2x Месяц назад +3

      is that rick and morty

    • @vulnoryx
      @vulnoryx Месяц назад

      @@user-qr4jf4tv2x yes

    • @nexushare8105
      @nexushare8105 Месяц назад +2

      damn how did i read it in rick and morty voice in my head 😆

    • @vulnoryx
      @vulnoryx Месяц назад

      @@user-qr4jf4tv2x indeed it is

    • @ThisIsAnAccount
      @ThisIsAnAccount Месяц назад

      Did you just... insult me with a **pointer**? Son of a..

  • @LizardGecko420
    @LizardGecko420 Месяц назад +311

    You realize how complicated pointer syntax is when the best explanation of how to read complex statements is in a funny YT video

    • @Mr.Not_Sure
      @Mr.Not_Sure Месяц назад +5

      Well, nobody writes them in the first place. That's why `typedef` exists.

  • @Hallilo
    @Hallilo Месяц назад +295

    I honestly never had any issues understanding basic and more advanced pointer stuff, but THIS is some actual good stuff LMAO great video

    • @ThisShitWontWor
      @ThisShitWontWor Месяц назад +2

      12 years old me learning C++ : "Ok so, its a box containing... a box, ok?, containing a box... fuck it"

    • @kaustubhsonar4613
      @kaustubhsonar4613 22 дня назад +4

      Bring me that stuff which you are smoking

  • @ry6554
    @ry6554 Месяц назад +396

    Honestly,
    An array of functions sounds pretty dope.
    Nevermind, an array of pointers to functions sounds pretty dope.

    • @VivekYadav-ds8oz
      @VivekYadav-ds8oz Месяц назад +13

      ain't that the same? or are we saying "an array of pointers to function pointers" (effectively double-indirection) in the second one?

    • @theepicguy6575
      @theepicguy6575 Месяц назад +41

      Well, you can't have arrays of functions in the first place
      Only pointers to functions

    • @user-uf4rx5ih3v
      @user-uf4rx5ih3v Месяц назад +11

      In C, you actually cannot store functions inside arrays anyway, the compiler will silently convert that code into a pointer to that function instead.

    • @jrstf
      @jrstf Месяц назад +3

      Is not every C++ member function referenced through an array of pointers to functions?

    • @pitri_hub
      @pitri_hub Месяц назад +9

      @@jrstf Per default, member functions are just statically compiled into the calling code. But it is true for virtual functions. They are referenced in the vtable, which exists for each type with virtual functions. Each of these objects then has an internal pointer to its respective vtable, which contains the pointers to the implementation defined procedures. This is how dynamic polymorphism is implemented.

  • @eleinaedelweiss6215
    @eleinaedelweiss6215 Месяц назад +232

    Who the hell would write the last one, without questioning their lives decisions.

  • @dipereira0123
    @dipereira0123 Месяц назад +110

    to whoever reached a point in life where you ended up here or doing this, i really hope you find inner peace one day...

    • @RT-ym9us
      @RT-ym9us Месяц назад +14

      A Pointer in life

    • @CapeSkill
      @CapeSkill 28 дней назад

      @@RT-ym9us ba dum tss.

  • @john.darksoul
    @john.darksoul Месяц назад +44

    I REFUSE to understand this syntax.

  • @moneteezee
    @moneteezee Месяц назад +81

    im actually glad i found this video, you explained this well and now i know how to interpret those long lines

  • @GL0RYS
    @GL0RYS Месяц назад +138

    bro lost me before the ad break 💀

    • @kingpen5866
      @kingpen5866 Месяц назад +7

      Bro really said bro 💀

    • @GL0RYS
      @GL0RYS Месяц назад +5

      @@kingpen5866 bro really said bro cause i said bro 💀

    • @fodetraore6666
      @fodetraore6666 Месяц назад

      Bro realy saic bro to some bro who realy said bro to bro 's comment 💀​@@GL0RYS

    • @VictorMartinez-vi7jx
      @VictorMartinez-vi7jx Месяц назад +6

      bro is a pointer to a bro that points to a bro

    • @GL0RYS
      @GL0RYS Месяц назад +1

      @@VictorMartinez-vi7jx bros making sense 🙏

  • @JoaoJGabriel
    @JoaoJGabriel Месяц назад +96

    It all can get stupidly complicated as we've seen, but the syntax follows simple rules:
    1. start reading from the identifier out
    2. favor [ ] and ( ) over *
    int (*(*x)[ ]) ( ):
    - Following rule #1, we start at x
    x
    - The identifier x is alone in parentheses with an asterisk, so it is [§1] a pointer
    *x
    - Outside of the parentheses, we follow rule #2, so it is [§2] an array
    (*x)[ ]
    - We're left with an asterisk inside the parentheses, so [§3] pointers
    *(*x)[ ]
    - Outside of the parentheses, rule #2, [§4] functions
    (*(*x)[ ])( )
    - The functions return [§5] int
    putting §1, §2, §3, §4 and §5 together:
    x is (§1) a pointer to (§2) an array of (§3) pointers to (§4) functions that return (§5) an integer
    Once you got the hang of it, you can rewrite the example like:
    * [ ] * ( ) -> int
    And stitch things together in a way that makes sense. "->" means "returns" and it's optional/redundant (anything immediately after parentheses in this notation is a return anyway)
    Take the example of 5:34:
    [ ] * * (* char, * (* char) -> * int) -> [ ] * (* * char, * ( ) -> * char) -> * int
    Array of pointers to a pointer to a function that takes (a pointer to a character and a pointer to a function that takes (a pointer to a character) and returns a pointer to an integer) and returns an array of pointers to a function that takes (a pointer to a pointer to a character and a pointer to a function that returns a pointer to a character) and returns a pointer to an integer
    It looks insane, but it's not that difficult to wrap your head around if you're writing it following those two simple rules

    • @nexushare8105
      @nexushare8105 Месяц назад +13

      bro i was with you util i expanded ur explanation... after expanding it i sad( i aint reading all this sheet lol) , but hey, great that u can explain this

    • @JoaoJGabriel
      @JoaoJGabriel Месяц назад +2

      @@nexushare8105 maybe there's a way to be more concise but then that's me who can't bother xD

    • @lightlezs7048
      @lightlezs7048 Месяц назад +4

      My man, using asterisks here for anything but pointers is fucking evil, was there really no other way?

    • @JoaoJGabriel
      @JoaoJGabriel Месяц назад +1

      @@lightlezs7048 hahahaha good point, I'm gonna change that

    • @JoaoJGabriel
      @JoaoJGabriel Месяц назад +1

      @@lightlezs7048 better?

  • @jatinsharma3280
    @jatinsharma3280 Месяц назад +11

    Man, It felt awesome and confusing at the same time, but thanks to you I come to know the different use of pointers.

  • @James-ne9td
    @James-ne9td Месяц назад +57

    "For example, if I use this struct 'Fucker'" caught me completely off guard XD
    My main takeaway from this video though is that as a C# dev for Unity, I shouldn't touch C++ with a 5 foot pole or else risk entering pointer hell.

    • @vibaj16
      @vibaj16 Месяц назад +20

      no one actually uses crazy pointer stuff like this. Actually useful pointer stuff is simple and often feels quite elegant.

    • @happygofishing
      @happygofishing Месяц назад +1

      random swearing is peak reddit humour

    • @James-ne9td
      @James-ne9td Месяц назад +1

      @@vibaj16 tbf, I was being slightly hyperbolic. I do want to get round to learning C++ eventually but the combination of pointers, header files, garbage collection, and syntax is just a lot.

    • @user-vt9bp2ei1w
      @user-vt9bp2ei1w Месяц назад

      @@vibaj16 It's really simple.... The library will only use (void* buf, size_t n) for ALL types. C believes that smart users know that the void* returned by the function is a specific type among the 100+ custom types, it will be a linklist + table with a specific internal mix of pointers to stack and pointers to allocated heap, and then you have to be careful about pointer casts, linklist iteration, use void* to calculate offsets, of course you will remember which one is CHAR8* string and which is CHAR16* string, finally free the heap allocation and perfectly avoid the pointer to the stack.
      The biggest advantage of C is that it is suitable for keeping your job.

    • @user-vt9bp2ei1w
      @user-vt9bp2ei1w Месяц назад

      It's really simple.... The library will only use (void* buf, size_t n) for ALL custom types. It is linklist + table with a specific internal mix of pointers to stack and pointers to allocated heap, CHAR8* string and which is CHAR16* string.

  • @marcsfeh
    @marcsfeh Месяц назад +144

    C's syntax makes things excessively hard to parse, in other languages like C3 or more Pascal style languages (like Go and Odin) it's much more clear how these declarations compose

    • @Apis035
      @Apis035 Месяц назад +18

      Odin makes me realize that C's syntax is absolute mess. Odin's syntax makes writing function pointer really easy to understand 👍

    • @user-sl6gn1ss8p
      @user-sl6gn1ss8p Месяц назад +18

      It's a feature to sure you realize you're doing something bad : p

    • @Jutastre
      @Jutastre Месяц назад +1

      I think the trick to parsing C declarations is to go from the inside (the name) out. Although you still have to know parser priority. Like the animation at 2:40, except it messes up the priority by looking at "int" before [20]

    • @Jutastre
      @Jutastre Месяц назад +1

      The 4:40 example shows the inside out parsing even better. The 5:35 example seems more complicated because of the function signatures but those aren't as important to parse IME. You basically just copy that from the function in question. If you need to understand it better you just look at that function itself.

    • @user-sl6gn1ss8p
      @user-sl6gn1ss8p Месяц назад

      @@Jutastre yeah, the parsing itself is pretty straightforward once you know how things associate and the relevant operator precedence.
      You start from the name and apply stuff to it from there - the result of doing this will generate something of the type on the left (the "return type" of the expression).
      Making sense of complicated definitions without naming the steps in the way is just hard by nature - C lets you expose yourself to that, but doesn't make you: you can always typedef things into reasonable steps if you'd like.

  • @BaneDestabapillado
    @BaneDestabapillado 5 дней назад +1

    Small tip for 1:20, you can order malloc like you did just by manually asking for each memory "sizeof(char) * 6..." but if you make a tipedef of your struct, you can just ask for a "sizeof(FUCKER)" and it will do the same, but far easier to read, and simpler

  • @bubbleopter
    @bubbleopter Месяц назад +3

    Such an awesome teaching style!

  • @halflight8811
    @halflight8811 Месяц назад +25

    this is what I understood from 3:10
    - arr[0] -> func1 => int1
    - arr [1] -> func2 => int2
    x ->arr - arr[2] -> func3 => int3
    - arr[3] -> func4 => int4
    - arr[4] -> func5 => int5

  • @tiaanbasson9092
    @tiaanbasson9092 Месяц назад +14

    That line of code in the thumbnail alone drove me insane and I haven't even watched the video yet.

  • @sdwone
    @sdwone Месяц назад +2

    Understanding pointers, is like the Great Barrier between amateur devs and the pros! Because THIS is a concept in which knowing how computers actually works, helps tremendously!

  • @user-hh8jh5gw8i
    @user-hh8jh5gw8i Месяц назад

    Entertaining and very educational for me. Seeing different uses of pointers that you tried to demonstrate and describe them made my me intrigue, but at the same time dizzy. 😂

  • @norude
    @norude Месяц назад +59

    I think, most of the confusion comes from the syntax.
    For example, int (*(*x)[])()
    in Rust, would be Box>
    "Box" is Rust's pointer
    i32 is Rust's int

    • @spacemario
      @spacemario Месяц назад +7

      If I understood it correctly, that's a pointer to a vector of pointers to functions that return an int, right?

    • @norude
      @norude Месяц назад +17

      yes, it's just a lot of angle brackets, in a way that actually makes sense
      C works the other way around

    • @shanesnover4048
      @shanesnover4048 Месяц назад +2

      Your outermost Box is unnecessary indirection as the Vec already places the memory on the heap.

    • @norude
      @norude Месяц назад +8

      @@shanesnover4048 that's true, but not relevant

    • @jrstf
      @jrstf Месяц назад +14

      Imagine programming in a language where you can actually specify the type of a value (i32) rather than some kind of a suggestion which varies in meaning in every implementation and even with platform specific switches on the command line.

  • @mazyyyy
    @mazyyyy Месяц назад +2

    I FINALLY GOT POINTERS after more than 15 tutorials and another 15 "explanation" videos, you somehow made my brain click. Thank you so much!

  • @zFede_Rico
    @zFede_Rico Месяц назад +18

    0:14 as soon as i read "france" i subscribed and liked the video

  • @NicolasChanCSY
    @NicolasChanCSY Месяц назад +16

    A programmer goes to therapy.
    Therapist: Please tell me what you are scared of.
    Programmer: I am scared of pointers.
    Therapist: Okay, let me give you an array of pointers to handle them.
    Programmer: 😱😱😱

  • @mvargasmoran
    @mvargasmoran Месяц назад +2

    what I get from this is that the song at the end rocks.

  • @mrprongles9510
    @mrprongles9510 Месяц назад

    What i learned from this video is that function pointers are pretty cool! :)

  • @Diamondyoutubization
    @Diamondyoutubization Месяц назад +3

    I think this video actually made these easier to parse.

  • @xtremecoding4005
    @xtremecoding4005 Месяц назад +6

    This video made me cry

  • @josephmazor725
    @josephmazor725 Месяц назад +3

    Actually the best explanation of these bullshit functions I’ve seen, thanks!

  • @hodayfa000h
    @hodayfa000h Месяц назад +2

    My favorite programming channel

  • @prism223
    @prism223 Месяц назад +17

    In older computers, especially Lisp machines, pointers always came with a size. A pointer was a 2-D object to the hardware. It had a location, and a size. The weirdness of C/C++ pointer types is an attempt to recapture some of the elegance of earlier hardware in a later era where the hardware forgot about data safety.

  • @norude
    @norude Месяц назад +23

    I finally understood. The type signatures are provided not the obvious way around, but outside in.
    For example:
    int x()
    is a function named "x", returning an integer. But instead of "x", I can put something different and it will mean, put the whole function inside whatever is in that position. For example "int (*x)()" means to put the function inside the *x. So It's a pointer to a function.
    But it's not just functions, it's **everything**
    if we analyze the "int (*x)()" again we get:
    int , which means to put the integer inside something
    that something:
    ()
    It's a function! which means, that we put our int iside the return paramater of that function
    what's something:
    *
    it's a pointer! which means, we put our whole function with integer return type into a pointer.
    that something:
    x
    It's a name "x" which means, we put our whole pointer to a function with a return type of integer into the name "x"
    Let's do another example:
    char *(*(*(**x[])())[])();
    it's a char, which is in a pointer, which is in the return type of a function, which is in a pointer which is in an array which is in a pointer, which is in the return type of a function, which is in a pointer, which is in a pointer, which is in an array, which is in "x"

    • @sasho_b.
      @sasho_b. Месяц назад +1

      Nah
      I mean if you understand it then great, but nah
      Its name first, then sufix left-to-right, then prefix right-to-left, with () being the sufix function arguments operator. I best understand it same as the compiler, start from the inside and go out, sufix prefix exit-braket. Its doesnt matter here, yes, but this also reminds you how other operators work like array access and dereference operators. *x[8] means "take the 8th member of x and dereference", where as (*x)[8] means "dereference x and take the 8th member of that"

    • @ahmadalzibary4337
      @ahmadalzibary4337 Месяц назад

      my honest reaction to this is: what the f$@% is that ?!?

  • @proteinsheikh9544
    @proteinsheikh9544 Месяц назад +1

    Absolute heater 🔥🔥🔥🔥

  • @no-ld3hz
    @no-ld3hz 7 часов назад

    3:24 funnily enough this is how dynamic dispatch works in c++, each class (implicitly) creates a pointer to a global array of function pointers. This is also known as a virtual table or vtable/vftable as it contains the list of "virtual" functions for that class.

  • @iagopaulo2445
    @iagopaulo2445 Месяц назад

    Omg I never understood pointers so well as I do right now thanks to this video

  • @therealdia
    @therealdia Месяц назад +6

    Ok how was this convoluted mess the thing that actually taught me how pointers work lol

  • @yuritsukahara
    @yuritsukahara Месяц назад +1

    awesome. dude I need your fonr and vscode thee right now

  • @arthyrgoldengate4599
    @arthyrgoldengate4599 Месяц назад +1

    Came to learn about pointers, returned with all my braincells drained. 10/10

  • @klevisimeri607
    @klevisimeri607 Месяц назад +1

    I like your vids a lot!

  • @ffreezed5620
    @ffreezed5620 Месяц назад

    ohhh, i get it, thx :D. Finally understand pointer in my 3rd year in uni :)

  • @iCrimzon
    @iCrimzon Месяц назад +9

    "Go insane?" GO MENTIONED RAAAAAAAAAAAAAAAAAAAAAAAAA

    • @batatanna
      @batatanna Месяц назад

      WE GOIN OUT OF THE HOOD WITH THIS ONE 🗣️🗣️🗣️🗣️🗣️

  • @vayr880
    @vayr880 6 дней назад

    im new to the concept of pointers and memory allocation, since i just started learning c++ a few days ago. decided to spend an hour or so looking at this after learning the basics of pointers until i feel like i understood enough about how it all ties together, i guess i learned more about it but now i have a painful headache...

  • @vesale.a7745
    @vesale.a7745 Месяц назад

    I seriously never could imagine insanity up to this level.

  • @quocanhhbui8271
    @quocanhhbui8271 26 дней назад

    Im watching this at 3:00am and yeah my brain is pretty much fried at this point

  • @mikaelluca8827
    @mikaelluca8827 Месяц назад

    love the soundtrack

  • @tvardero
    @tvardero Месяц назад +7

    6:00 Bro is holding the entire class inside his variable definition
    The God Variable.

    • @dawiddulian2403
      @dawiddulian2403 Месяц назад

      A class that someone parameterised the hell out of, it's like "okay, let x point to containers upon containers of functions (class) that parse strings... but in a waythat is so parametrised and specific that you need to parse other string in your chosen function and based on result of parsing you get the answer of your call of x...
      ...the anser being a f***ing array ofpointers to functions! So basically the class that is x is not all - you now use this class to hold the answers of called(/callable) functions and use THEM as your ACTUAL functions that themselves take an array of strings and parse those strings collection based on (presumably, because it doesn't make much sense otherwise) the original character that is returned from chosen constexpr function (due to no parameters)...
      ...and all that returns an adress of where the value of it is stored, YOU KNOW, LIKE IT'S TOTALLY NORMAL.

  • @madalenaferreira3018
    @madalenaferreira3018 Месяц назад

    somehow this made me understand pointers better than 4 years in uni

  • @farukyldrm8498
    @farukyldrm8498 Месяц назад +1

    you shoud have mentioned operator precedence.
    and also thr syntax related to those concepts perfectly fit into english grammar. as a Türk, ı can say it in english (up to some point) but cannot think of its meaning because we build up the noun phrases other way around

  • @semmu93
    @semmu93 Месяц назад

    also all this pointer magic can be neatly swept under the rug if you use a lot of typedefs with proper names, makes the code much easier to understand for everyone

  • @felix34ever1
    @felix34ever1 Месяц назад

    Ngl i actually understand now thanks 🥰😂

  • @PBalint817
    @PBalint817 Месяц назад

    This makes me thankful for the C# syntax

  • @Drugio24
    @Drugio24 3 дня назад

    this actually makes sense

  • @pierrotarat
    @pierrotarat Месяц назад +1

    "Great, you've explained these quite well. Now use them."

  • @drominitoketchup
    @drominitoketchup Месяц назад

    Hi, you have been found in my recommendation :O
    I'm watching it only 0:32 and already subscribed you.
    You have a funny sense of Humor btw xD.

  • @drominitoketchup
    @drominitoketchup Месяц назад +6

    I understood 80% after 15 min totally

  • @wiltonribeiro3951
    @wiltonribeiro3951 Месяц назад

    Ok i need revisit some pointer videos before understand this

  • @thfsilvab
    @thfsilvab Месяц назад

    Even the parser gave up, and he's still going

  • @s8x.
    @s8x. Месяц назад +1

    bro got every meme in his vault

  • @aaravdayal4529
    @aaravdayal4529 Месяц назад

    This actually made me understand pointer expressions. Thank you.

  • @bakeurstew1434
    @bakeurstew1434 12 дней назад

    this is the first time i seen a sponsor segment use k-on for backround music 😂

  • @JacksHQ
    @JacksHQ Месяц назад

    You had me at "Fucker". Subscribed.

  • @mysterry2000
    @mysterry2000 21 день назад

    This video is amazing, now I can play that game with my friends:
    Team A: Take a shot every time he doesn't say "pointer"
    Team B: Take 3 shots every two times he says "pointer"
    Let's see who wins 💪

  • @VivekYadav-ds8oz
    @VivekYadav-ds8oz Месяц назад +1

    I can't believe I actually was able to solve the last two after fumbling on all the previous ones (mainly because of parenthesis which changed if x was a pointer to an array or an array of pointers). I think I'm cursed now.

  • @Rose-ec6he
    @Rose-ec6he Месяц назад +1

    I wish this was a joke of some kind, then I wouldn't want to cry

  • @JerryThings
    @JerryThings Месяц назад

    This video is amazing

  • @dimi144
    @dimi144 Месяц назад +2

    I think that this is 100% the reason for the existence of the typedef keyword

  • @Komil484
    @Komil484 Месяц назад +2

    The way i look at it is, the way you declare a pointer, is the way you access it. So if you got int *(*p[]), you'd access the innermost value (being the int) in the same way: *(*p[i]). And then you work your way backwards
    To make the point(er) clearer ill go through this. So you access the int by doing *(*p[]), so *p[] is an array of pointers to int, and *p points to an array of pointers to int, and p is a pointer to an array of pointers to int

    • @nexushare8105
      @nexushare8105 Месяц назад

      anddd.... u just had to make this pun

  • @psyk0oooo
    @psyk0oooo Месяц назад +2

    i like your funny words magic man

  • @tosaksettharungson
    @tosaksettharungson Месяц назад

    I buried this nightmare 20 yrs ago. After watching I'm sure I'll get one tonight.

  • @Wazzup_Taibei
    @Wazzup_Taibei Месяц назад

    interviewer: Great, add it to our interview question list!

  • @landin1181
    @landin1181 Месяц назад +6

    Your memory view and c debugger in vscode look very nice. Could you do a video on how you set this up or just gimme some info lol im jealous.

  • @mothratheresa8582
    @mothratheresa8582 Месяц назад

    1. Love the suffering
    2. Love the use of digimon story cyber sleuth ost, its suitable considering the BS that is the digivolution tree.
    3. Great video

  • @VictorMartinez-vi7jx
    @VictorMartinez-vi7jx Месяц назад

    I am subscribing without further questions

  • @AndersonPEM
    @AndersonPEM Месяц назад

    I'm having PTSD from university every time you say pointers more than 2 times in a row

  • @glitchy_weasel
    @glitchy_weasel Месяц назад

    Unirocanically very useful video.
    Mad respect at the dinosaurs who invented C lol

  • @therelatableladka
    @therelatableladka Месяц назад

    Everytime I paused and I am shocked how i get it before you start telling how to understand it. Maybe because i have been doing reverse engineering and malware stuff for long time now. Those codes actually have hell of typecasting with different data types and sizes. But greater video !!! ❤

  • @ChrisgammaDE
    @ChrisgammaDE Месяц назад

    1:10 I'm pretty sure you can also use sizeof() directly instead of calculating manually

  • @lovalmidas
    @lovalmidas Месяц назад

    On one hand, class/module structures and delegates are basically pointer stuff in pure C. In higher languages, these things 'look' much simpler, by simpler it means the context now spans several .cs files. :P
    On the other hand, your professor could give you a snippet of ASM code, and ask something like: provide an (or the most restrictive) equivalent C function signature of a CALL function in the code. Yes, you shall use "mov dh,word ptr [eax]" to figure out that eax is a pointer to the value dh now holds, and the only use case of the value being "test dh,dh" means eax can be a *byte, or *bool.
    :'D

  • @rifqiradifan2457
    @rifqiradifan2457 Месяц назад

    I'm having too much pointer in my brain, thankss

  • @JLSXMK8
    @JLSXMK8 Месяц назад

    3:29 --> See line 15 (3:21) for further clarification.
    In short, line 25 is saying that you want to first dereference the pointer, followed by selecting the function at index 0 for that pointer; then you have to de-reference that index (the array itself decays to a pointer containing the addresses of each function) in order to call the function you want from that double pointer. i.e., createFunctionPointerArray() returns "& -> {&add, &subtract}". You're making an embedded function library, I guess you could say, that the variable references, and you have to dereference all those pointers to access the function you want. Easy to understand?

  • @M-Cipher
    @M-Cipher Месяц назад

    understandable ...thank you

  • @Muskar2
    @Muskar2 Месяц назад

    A pointer consists of: 7, 9, 9, 9, 9, 9, 12.
    I.e. 7 bits unused, 12 bits for the physical offset in memory and the 9's are offsets into a page "tree" if you will . Most CPU's today only use four-level pages, so the top 16 bits (instead of 7) are unused - but Intel is starting to use five-level pages too. It's also why pages are 2^12 (4096) in size, and why large pages can be 2MB (2^(12+9)) and 1GB (2^(12+9+9)) respectively. You can cast a pointer to a number, and shift the bits into different values to clearly see how there's a clear pattern when you allocate memory etc.

  • @nickpratt9338
    @nickpratt9338 Месяц назад

    Please do a vid of how you got that view of memory!

  • @craftydoeseverything9718
    @craftydoeseverything9718 Месяц назад +3

    How did you not go insane sooner?!!?!?!???

  • @togofar
    @togofar Месяц назад

    Should've mentioned the right-left rule. It's an easy algorithm to follow when trying to understand complex declarations like this.

  • @damindux
    @damindux Месяц назад

    Now I'm seeing stars everywhere.

  • @bobedge289
    @bobedge289 Месяц назад

    Those complex function declarations make me think of complex relational database.

  • @nulldot0
    @nulldot0 Месяц назад +2

    Bro what's your vs code theme it looks nice

  • @Yipper64
    @Yipper64 Месяц назад

    I knew that I found pointers confusing...
    I just didnt know quite how deep that went.

  • @keheck
    @keheck Месяц назад

    There's probably already been someone saying this, but at 1:09, the allocation for the FUCKER variable was technically not correct, since alignment could see the struct end up larger than the raw data it contains. For instance, if we used an int after the char[6], most compilers would add a 2-byte padding before it to ensure that the address of the int is divisible by 4 (size of a 32 bit int which I assume is what int is)
    In general, the safest option is to always use malloc(sizeof()); it'll give you the correct size the compiler will assign your structs

  • @birdrun4246
    @birdrun4246 Месяц назад

    I have been working professionally with C for well over a decade. I know most of the ways it can bite. If I see any of these in production, I'm burning the codebase and walking away, and so should you.

  • @satoshikei
    @satoshikei Месяц назад +2

    Pro Tip: Just add another */& or put around parentheses until you get no compilation errors.

  • @rssszz7208
    @rssszz7208 27 дней назад

    My head hurts 😭

  • @ilshat2955
    @ilshat2955 25 дней назад

    Well, you guys, I'll tell you this: in my experience you'll never need those complex things. I dealt with a pointer to a function that has no input and returns nothing to execute an application from a bootloader in an embedded firmware. And a structure with function pointers with different arguments for different callbacks. It doesn't get more complicated than that. And if you have to use it, you'll do it once and then forget about that library.

  • @naveenwilliam3594
    @naveenwilliam3594 Месяц назад

    Idk what the fuck happened to me but i was laughing like a fucking psycho everytime i hear the fucking word POINTER.

  • @attilamiszkuly5868
    @attilamiszkuly5868 Месяц назад +2

    Can anyone tell me what theme is he using?

  • @pierregarric6674
    @pierregarric6674 Месяц назад

    To create a program that parses a C expression and translate it into a sentence would be quite fun to do

  • @joshuam2263
    @joshuam2263 Месяц назад +1

    I came into this, expecting to learn how to read that stuff. Sadly I don't think I learned anything (except maybe reading the decl from the inside outwards?). This video was entertaining though. Just to give you feedback