| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 362 人关注过本帖
标题:关于结构体的一个问题
取消只看楼主 加入收藏
pauljames
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:千里冰封
威 望:9
帖 子:1555
专家分:10000
注 册:2011-5-8
结帖率:88.89%
收藏
已结贴  问题点数:50 回复次数:1 
关于结构体的一个问题
#include <stdio.h>

typedef struct
{
    char ft1;
    int ft;
}st1;

typedef struct
{
    int z1;
    char z2;
}st2;

st2 as_params;


void test(st1 *as_params_ptr)
{
   
    unsigned char *pch;
    int *pint;
    pch = as_params_ptr;
    pch++;
    pint=pch;
    printf("%x\n",*pint);
    printf("%x\n",as_params_ptr->ft);
}

int main(void)
{
        as_params.z1=0x12345678;
        as_params.z2=0x33;

    test((st1 *)&as_params);  
   
    getch();
}

我的本意是用两个排列顺序不同的结构体来测试交换后的结构,原来以为as_params_ptr->ft应该从第二个字节开始取4个字节,这样跟*pint的结果应该是一样的,结果却出乎意料,
33123456
33
不知道为啥,请大家帮忙分析一下。





[ 本帖最后由 pauljames 于 2012-12-6 19:18 编辑 ]
搜索更多相关主题的帖子: include 结构体 
2012-12-06 19:10
pauljames
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:千里冰封
威 望:9
帖 子:1555
专家分:10000
注 册:2011-5-8
收藏
得分:0 
对了,会不会是32bit对齐的问题。。。我忽略了。
试过了,确实如此
    printf("%p\n",pint);
    printf("%p\n",&(as_params_ptr->ft));

00404061
00404064

大家随便看看吧,前几个人1人10分好了。。。。。。

[ 本帖最后由 pauljames 于 2012-12-6 19:20 编辑 ]

经常不在线不能及时回复短消息,如有c/单片机/运动控制/数据采集等方面的项目难题可加qq1921826084。
2012-12-06 19:14
快速回复:关于结构体的一个问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.119974 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved