Nisy 发表于 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

mysoftlove 发表于 2009-4-5 12:42:04

看了一下,确实有点不正常
这是为什么呢?

boyachang 发表于 2009-4-27 17:48:59

估计压结构体压了多个整数 3e8 是1000,432090 char *name;的地址,42c7cccd float score 当成整数的值,没试,随便猜的,呵呵
页: [1]
查看完整版本: 结构体中有趣的自增现象