刚刚突然感受到了 C 语言指针的神奇之处 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
zxCoder
V2EX    C

刚刚突然感受到了 C 语言指针的神奇之处

  •  
  •   zxCoder 2023-10-01 22:42:55 +08:00 2627 次点击
    这是一个创建于 743 天前的主题,其中的信息可能已经有所发展或是发生改变。

    以前大学学 C 的时候,只是说指针就是地址。

    这么多年没再碰 C 语言,刚刚发现,其实指针除了是一个地址,应该还包含“如何去读取这个地址的值”这个东西?

    同样的地址,赋值给 int 指针和 char 指针,读取来的东西肯定是不一样的,感觉很有意思。

    mightybruce
        1
    mightybruce  
       2023-10-01 23:49:52 +08:00
    这没什么神奇, 不过将 int 指针赋值给 char 指针是没有意义的事情。这个存放的值其实还和字节序大小端有关。

    如果你将结构体指针转换为 char 指针或字节指针 还有点实际用处,当然不能将指针直接赋值另一个指针。
    githmb
        2
    githmb  
       2023-10-02 02:42:32 +08:00
    啊这
    LUO12826
        3
    LUO12826  
       2023-10-02 06:23:34 +08:00
    “如何去读取这个地址的值”这个东西其实就叫类型。如果进一步提问,还可以问出“为什么一个地址需要有类型”以及“类型存在于编译期还是运行期”,哈哈。虽然这些问题显得有点呆,但从来没想过的人还真会一下子愣住。
    zzzsy
        4
    zzzsy  
       2023-10-02 09:07:54 +08:00 via Android
    甚至类似结构体继承 https://en.m.wikipedia.org/wiki/Type_punning :)
    tomisj
        5
    tomisj  
       2023-10-02 10:35:13 +08:00 via Android
    「如何读取这个地址的值」其实是和语境高度相关的,所以 C 很容易就把内存玩坏,也是因为这个,C 可以用来干一些神奇的事情。
    jazzsama
        6
    jazzsama  
       2023-10-02 10:39:37 +08:00
    当然不只是地址,否则为什么还需要指针类型呢?
    yolee599
        7
    yolee599  
       2023-10-02 10:45:37 +08:00 via Android
    其实内存中的数据是不变的。每个类型占用的字节长度不一样,所以用不同类型读出来会不一样,还涉及大小端的问题。你读 8 个连续地址的 char 打印出来,你再读一个 int 出来,然后用计算器转换 int 为 16 进制,看看你发现了什么?
    msg7086
        8
    msg7086  
       2023-10-02 13:00:12 +08:00
    不包含类型的地址指针是 void*无类型指针。有类型指针……当然有类型了。
    PTLin
        9
    PTLin  
       2023-10-02 14:19:32 +08:00
    位 + 上下文
    sakura6264
        10
    sakura6264  
       2023-10-02 15:04:51 +08:00
    指针做下强制类型转换就变成按别的类型读数据了
    YuJianrong
        11
    YuJianrong  
       2023-10-03 05:57:17 +08:00
    学习和理解指针的最佳办法,就是去读编译出来的汇编指令。
    C 语音读 O0 的汇编指令是很容易的。
    Ricciardo
        12
    Ricciardo  
       2023-10-03 12:19:24 +08:00
    啊这
    awolf
        13
    awolf  
       2023-10-03 13:44:15 +08:00
    和蒋公微操模式类似
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     919 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    orld is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 20:49 PVG 04:49 LAX 13:49 JFK 16:49
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86