标题: *(unsigned char *)&s 结构体问题 [打印本页]

作者: 1314love    时间: 2022-8-11 13:18
标题: *(unsigned char *)&s 结构体问题

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类型吗?




作者: 的花朵    时间: 2022-8-11 16:31
指针才指向地址,&运算符在变量前跟变量结合表示取地址,可以想一下,如果&s还是struct test_s类型,那么&运算符有何意义?
作者: 天ノ忆    时间: 2022-8-11 17:23
s是test_s类型的结构体,&s是s的地址,指针是指向s的地址,你连指针的概念都没弄懂
作者: Hephaestus    时间: 2022-8-11 17:43
能问出“为什么&s是struct test_s * 类型指针”的,回头看教科书吧,指望论坛有人写几千个字给你说明是不现实的。
作者: jxcrgt35    时间: 2022-8-11 19:16
结构体的首地址也是结构体第一个数据的地址,所以一样的
作者: Y_G_G    时间: 2022-8-12 06:49
你的另外几个问题是定时器的高8位和低8位的问题和8位机跟32位机的区别
由此看来,我不觉得你能操控指针和结构体
新手更应该做的是流水灯或者定时器闪灯之类的
程序从10行代码,慢慢的增加到11行,然后是12行,然后慢慢的到100行,一千行,再然后,技术到家了,代码就开始慢慢的减少了,因为你可能学会了更高级的函数或者算法
而不是像你这样,跳着学
作者: wufa1986    时间: 2022-8-12 08:18
取地址,很好理解吧
作者: HUNTER2022    时间: 2022-8-12 10:13
这是个C语言的基本问题。指针包括两个要素:地址数值、该地址的数据类型。
S是个结构体类型,那么&S自然就是该结构体类型的指针,其地址数值为结构体数据的入口地址。在你的语句中用强制类型转换,把它转换成了char类型指针。之后再取地址内容,自然取的就是char类型。




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1