您的位置:首页 > 其它

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

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  编译器 语言 c