飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 3916|回复: 2

结构体中有趣的自增现象

[复制链接]

该用户从未签到

发表于 2009-3-23 01:54:01 | 显示全部楼层 |阅读模式
#include <iOStream>
using namespace std;

struct stud
{
        long num;
        char *name;
        float score;       
};

int main()
{
        struct stud wang={1000,"wangxiaoming",99.9};
        struct stud *p=&wang;
       
        /*int a;
        int *p=&a;*/
       
        printf("%ld %s %f \n",wang.num,wang.name,wang.score);
       
        printf("%d \n",sizeof(*p));     // 12个字节
        printf("%d \n",sizeof(wang));
       
        printf("%0x \n",*p);            // 输出了wang.num的十六进制 (只输出4个字节)
        printf("%0x \n",wang);          // 输出了wang.num的十六进制 (只输出4个字节)
       
        printf("%0x %0x %0x \n",*p,*p,*p);
        printf("%0x %0x %0x \n",wang,wang,wang);
        printf("%0x %0x %0x %0x %0x %0x \n",wang,wang,wang,wang,wang,wang);               
       
        printf("%0x %0x %0x\n",*p,(*p).num,(*p).name);
        printf("%0x %0x %0x %0x\n",*p,*p,(*p).num,(*p).name);
        printf("%0x %0x %0x\n",wang,wang.num,wang.name);
        printf("%0x %0x %0x %0x\n",wang,wang,wang.num,wang.name);
       
        return 0;
}

非常有趣的运行结果:

1000 wangxiaoming 99.900002
12
12
3e8
3e8
3e8 432090 42c7cccd
3e8 432090 42c7cccd
3e8 432090 42c7cccd 3e8 432090 42c7cccd
3e8 432090 42c7cccd
3e8 432090 42c7cccd 3e8
3e8 432090 42c7cccd
3e8 432090 42c7cccd 3e8



             Press any key to continue
PYG19周年生日快乐!

该用户从未签到

发表于 2009-4-5 12:42:04 | 显示全部楼层
看了一下,确实有点不正常
这是为什么呢?
PYG19周年生日快乐!

该用户从未签到

发表于 2009-4-27 17:48:59 | 显示全部楼层
估计压结构体压了多个整数 3e8 是1000,432090 char *name;的地址,42c7cccd float score 当成整数的值,没试,随便猜的,呵呵
PYG19周年生日快乐!
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

快速回复 返回顶部 返回列表