找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1384|回复: 7
收起左侧

*(unsigned char *)&s 结构体问题

[复制链接]
ID:1041297 发表于 2022-8-11 13:18 | 显示全部楼层 |阅读模式

struct test_s
  {
    unsigned char a;
    int b;
  };
  struct test_s s;
  s.a='a';
  printf("a=%c\n",s.a);
  printf("a=%c\n",*(unsigned char *)&s);  //两个printf打印的结果都是一样的
这里 &s为 struct test_s * 类型指针
请问大伙,为什么&s是struct test_s * 类型指针,它不是struct test_s类型吗?



回复

使用道具 举报

ID:248705 发表于 2022-8-11 16:31 | 显示全部楼层
指针才指向地址,&运算符在变量前跟变量结合表示取地址,可以想一下,如果&s还是struct test_s类型,那么&运算符有何意义?
回复

使用道具 举报

ID:139866 发表于 2022-8-11 17:23 | 显示全部楼层
s是test_s类型的结构体,&s是s的地址,指针是指向s的地址,你连指针的概念都没弄懂
回复

使用道具 举报

ID:883242 发表于 2022-8-11 17:43 | 显示全部楼层
能问出“为什么&s是struct test_s * 类型指针”的,回头看教科书吧,指望论坛有人写几千个字给你说明是不现实的。
回复

使用道具 举报

ID:939553 发表于 2022-8-11 19:16 | 显示全部楼层
结构体的首地址也是结构体第一个数据的地址,所以一样的
回复

使用道具 举报

ID:401564 发表于 2022-8-12 06:49 | 显示全部楼层
你的另外几个问题是定时器的高8位和低8位的问题和8位机跟32位机的区别
由此看来,我不觉得你能操控指针和结构体
新手更应该做的是流水灯或者定时器闪灯之类的
程序从10行代码,慢慢的增加到11行,然后是12行,然后慢慢的到100行,一千行,再然后,技术到家了,代码就开始慢慢的减少了,因为你可能学会了更高级的函数或者算法
而不是像你这样,跳着学
回复

使用道具 举报

ID:879348 发表于 2022-8-12 08:18 | 显示全部楼层
取地址,很好理解吧
回复

使用道具 举报

ID:970221 发表于 2022-8-12 10:13 来自手机 | 显示全部楼层
这是个C语言的基本问题。指针包括两个要素:地址数值、该地址的数据类型。
S是个结构体类型,那么&S自然就是该结构体类型的指针,其地址数值为结构体数据的入口地址。在你的语句中用强制类型转换,把它转换成了char类型指针。之后再取地址内容,自然取的就是char类型。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表