You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言指针类型转换疑问:为什么srcpt不需要定义为双指针**srcpt?

问题解答

核心误区澄清

你产生这个疑问主要是两个常见的理解偏差:

  1. 搞混了两个结构体的b成员类型
    你用到的dstptr是dummya_t*类型,对应的结构体定义如下:
    typedef struct dummya
    {
        int a;
        int b;
    } dummya_t;
    
    这里的成员b是int类型的普通整数变量,不是指针也不是数组,不要和另一个结构体dummy_t里的数组成员b混淆。
  2. 对强制类型转换的目标类型判断错误
    代码(dummy_t*)(dstptr->b)的作用,是把dstptr->b存储的整数值,强制转换为一个指向dummy_t类型内存的地址值,转换后的结果本身就是dummy_t*类型的单指针,赋值给同类型的srcpt自然不需要用双指针**srcpt。

补充说明

这段代码本身属于非常不规范的危险写法:

  • 直接将int类型整数强制转换为指针的行为可移植性极差,在int长度小于指针长度的架构(比如64位系统下int通常是4字节,指针是8字节)下会出现地址截断,导致非法内存访问
  • 除非你明确确认dstptr->b中存储的整数值确实是一块合法的、可供访问的dummy_t类型内存的地址,否则这段代码运行一定会触发崩溃或未定义行为

内容的提问来源于stack exchange,提问作者Peace9795

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 02:51:04