就是为了搞钱 2022-09-03 20:54 采纳率: 75%
浏览 28
已结题

关于结构体指针赋值的问题

C语言中,两个指向不同结构体的指针变量可以直接相互赋值吗?
如果需要强转的话,强转成被赋值的指针类型和void*有什么区别?

  • 写回答

3条回答 默认 最新

  • 私房菜 移动开发领域优质创作者 2022-09-05 10:29
    关注

    第一个问题,
    可以相互转换,只不过,你不要想的太复杂,不管是什么结构体指针,它也就是个变量,是变量都可以赋值,
    假如,两个地址分别是0x1000,0x2000
    只不过,你赋值之后从0x1000,这时候正常的内存分布,变成了0x2000,内存分布不是你想要的

    第二个问题,
    有区别,void* 只是个空类型,无法通过指针看它的内存分布,而,int*,则表示,内存分布是个int 类型的数

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
  • .魚肉 2022-09-03 21:16
    关注

    为什么要给指针指明类型?因为往往都会利用指针移动,指定了类型也就告诉了它++移动的字节数,
    强制转换无非就是改变了这个指针单词移动的字节数而已,至于空指针可想而知它不知道自己++要移动的字节数

    评论
  • 亖夕 Python领域新星创作者 2022-09-03 22:58
    关注

    1.C语言中,两个指向不同结构体的指针变量可以直接相互赋值吗?
    不能
    2.如果需要强转的话,强转成被赋值的指针类型和void有什么区别?
    void
    指针只知道目标地址,但是不知道地址大小,也就是说void*指针不能正常移动。
    而有明确类型的指针即知道地址位置,也知道地址大小,可以正常移动(指向)

    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 9月15日
  • 已采纳回答 9月7日
  • 创建了问题 9月3日

悬赏问题

  • ¥15 Erasure Code纠删码表
  • ¥15 用vite创建的vue3项目,404重定向不起作用??
  • ¥15 关于#c语言#的问题:一个球从80米高度自由落下,每次落地后反弹的高度为原高度的一半计算6次小球反弹的高度.(反弹结果取整,使用走走for循环结构)
  • ¥15 SurfaceControl的screenshot问题
  • ¥15 基于51单片机的oled菜单代码,要C语言,模块化编程!
  • ¥15 JAVAswing,设计一个扑克牌什么的
  • ¥50 python ctypes调用dll实现分析
  • ¥40 用python解决数据统计问题
  • ¥100 是否有方案能通过抓包分析得到移动应用的名称和包名信息?
  • ¥15 opencv检测不到轮廓