关于“结构体变量名代表什么”的理解
2008-10-19 23:11
351 查看
刚看了下,网上关于结构体变量名的文章,现做一些总结。理解可能还会有错误,有待以后更正。
结构体变量代表的是一块内存区域。
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
结构体变量代表的是一块内存区域。
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
相关文章推荐
- 什么是工作流,关于工作流的一些理解
- 关于变量和指针的深度理解
- 关于cpu的分析--us,sys百分比代表什么
- 初学者关于c语言中函数局部变量空间释放的理解
- 成员变量为函数指针的结构体的理解
- 关于注册表的5大分支所代表的是什么
- 结构体里的元素前面有一点“.”代表什么意思--结构体成员的初始化
- C++结构体中关于结构体变量,指针,地址之间的转换
- 什么是指针?关于指针的数组,数组指针,函数指针,函数指针数组,指向函数指针数组的指针的理解
- 个人理解:什么情况下需要使用protected修饰类成员变量
- 关于java环境变量的一些理解
- Unix系统中关于SHELL中的内置变量$?的理解
- 关于argument变量的理解
- C++中关于类(封装、继承、多态)区别于结构体的理解
- 关于JS中变量提升的规则和原理的一点理解(一)
- 关于结构体中变量空间占用问题思考
- 关于const变量的一点理解
- 关于volatile变量的理解
- 关于结构体中自定义变量的偏移(offset)
- 关于C语言中局部变量、外部变量、静态变量的理解