刚看了下,网上关于结构体变量名的文章,现做一些总结。理解可能还会有错误,有待以后更正。
综合几个知识点:
结构体变量代表的是一块内存区域。
- typedef struct
- {
- char m;
- int n;
- } st;
- void main()
- {
- st st1;
- /*声明一个变量,则代表申请了一片内存区域。从程序员的角度这块内存区域就可以用st1来表示.而内存区域的大小是由类型决定的。这里为4(char m)+4(int n)个字节(按理说m为char类型应该1个字节,为什么分配了4个字节的空间,好像与编译器根机器字节有关,这个问题还需要进一步搞明白)*/
- 这样,这片内存区域就可以表示为:
- xx xx xx xx | xx xx xx xx
- 其中前四个字节用于存放char m,后四个字节用来存放int n.
- st1.m='a';
st1.n=4; - 这样内存中的值为:
- a xx xx xx|00 00 00 04(其中xx xx为随机值)
- printf("/n%c,%d",st1);
- /*这句话,可以正确输出 a,4。实际是输出内存区域中的内容*/
- printf("/n%c",st1);
- /*这句话也可以正确输出a */
-
- char *p;
- int i;
- p=(char *)&st1;
- printf("/n%c",*p);
- p+=4;
- 注意,地址的单位变成char型。这样p事实上指向第4个字节的数据
- printf("/n%d",*p);
- 可以正确输出4
- printf("/n**************");
- }
C语言中变量名st st1;代表一块内存区域,大小为8个字节。
&st1,则是该内存区域的起始地址。
st1+1,中的"1"是由st1的类型决定的。假设st1=0x0001,则st1+1为0x0009