找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1946|回复: 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类型吗?



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
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 * 类型指针”的,回头看教科书吧,指望论坛有人写几千个字给你说明是不现实的。
回复

使用道具 举报

5#
ID:939553 发表于 2022-8-11 19:16 | 只看该作者
结构体的首地址也是结构体第一个数据的地址,所以一样的
回复

使用道具 举报

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

使用道具 举报

7#
ID:879348 发表于 2022-8-12 08:18 | 只看该作者
取地址,很好理解吧
回复

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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