关于“结构体变量名代表什么”的理解

本文探讨了C语言中结构体变量的声明和内存分配。通过示例展示了`typedef struct`定义的st类型,说明了结构体变量如st1在内存中的布局,以及如何通过指针访问结构体成员。程序中通过输出结构体变量的值,解释了如何正确读取内存区域的内容,包括字符m和整数n,并讨论了指针偏移在访问结构体元素中的应用。
 刚看了下,网上关于结构体变量名的文章,现做一些总结。理解可能还会有错误,有待以后更正。

    结构体变量代表的是一块内存区域。
            

  1. typedef struct
  2. {
  3.     char m;
  4.     int  n;
  5.     
  6. } st;

  7. void main()
  8. {
  9.     st st1;   
  10. /*声明一个变量,则代表申请了一片内存区域。从程序员的角度这块内存区域就可以用st1来表示.而内存区域的大小是由类型决定的。这里为4(char m)+4(int n)个字节(按理说m为char类型应该1个字节,为什么分配了4个字节的空间,好像与编译器根机器字节有关,这个问题还需要进一步搞明白)*/
  11. 这样,这片内存区域就可以表示为:
  12. xx xx xx xx | xx xx xx xx

  13. 其中前四个字节用于存放char m,后四个字节用来存放int n.
  14. st1.m='a';
     st1.n=4;
  15. 这样内存中的值为:
  16. a xx xx xx|00 00 00 04(其中xx xx为随机值)

  17. printf("/n%c,%d",st1);
  18. /*这句话,可以正确输出 a,4。实际是输出内存区域中的内容*/
  19. printf("/n%c",st1);
  20. /*这句话也可以正确输出a */
  21.    
  22.     char *p;
  23.     int i;  

  24.     p=(char *)&st1;
  25.     printf("/n%c",*p);
  26.     p+=4;
  27.     注意,地址的单位变成char型。这样p事实上指向第4个字节的数据
  28.     printf("/n%d",*p);
  29.     可以正确输出4
  30.     printf("/n**************");      
  31. }
 综合几个知识点:
C语言中变量名st st1;代表一块内存区域,大小为8个字节。
&st1,则是该内存区域的起始地址。
st1+1,中的"1"是由st1的类型决定的。假设st1=0x0001,则st1+1为0x0009
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值