• Lightfire228@pawb.social
    link
    fedilink
    arrow-up
    0
    ·
    edit-2
    8 days ago

    Mostly because at the lowest level of computing (machine code and CPU instructions), pointers are the only method (that I know of) of any kind of indirection.

    At the lowest level, there are 2 types of references:

    • CPU registers
    • memory addresses (pointers)

    Every higher level language feature for memory management (references, objects, safe pointers, garbage collection, etc) is just an abstraction over raw pointers

    Pointers themselves are really just abstractions over raw integers, whose sole purpose is to index into RAM

    With that in mind, pointers to pointers are a natural consequence of any kind of nested object hierarchy (linked lists, trees, objects with references to other objects, etc)


    The only other kind of indirection would be self-modifying machine code (like a Wheeler Jump). But the computing world at large has nixed that idea for a multitude of reasons

    • bleistift2@sopuli.xyz
      link
      fedilink
      English
      arrow-up
      0
      arrow-down
      1
      ·
      8 days ago

      linked lists, trees, objects with references to other objects

      That’s not a pointer to another pointer, but a pointer to a data structure that happens to contain another pointer.

      • Lightfire228@pawb.social
        link
        fedilink
        arrow-up
        1
        ·
        edit-2
        8 days ago

        The distinction is meaningless in the land of Opcode’s and memory addresses

        For example, a struct is just an imaginary “overlay” on top of a contiguous section of memory

        Say you have a struct

        struct Thing {
          int a;
          int b;
          Thing* child;
        }
        
        Thing foo {}
        

        You could easily get a reference to foo->child->b by doing pointer arithmetic

        *((*((*foo) + size(int)*2)) +size(int))
        

        (I’ve not used C much so I’ve probably got the syntax wrong)