首页
社区
课程
招聘
[求助]通过结构体偏移获取值 有源码
发表于: 2010-6-30 15:26 3498

[求助]通过结构体偏移获取值 有源码

2010-6-30 15:26
3498
#include <stdio.h>
#include <iostream.h>
#pragma pack(1)
typedef struct stu
{
        int a;
        int b;
}stu,*pstu;
int main(){

int *c;
stu s;
s.a=8;
s.b=9;
cout<<&s<<endl;
cout<<&(s.a)<<endl;
cout<<&(s.b)<<endl;
c=(int*)(&s+0x04);
cout<<*c;
}
b不是在距结构体开头4字节处吗?为什么我的这种方式得不到9的输出呢?请各位大侠帮忙。

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 49
活跃值: (19)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
#include <stdio.h>
#include <iostream.h>
#pragma pack(1)
typedef struct stu
{
  int a;
  int b;
}stu,*pstu;
int main(){
char a='a';
int *c;
stu s;
s.a=8;
s.b=9;
cout<<&s<<endl;
cout<<&(s.a)<<endl;
cout<<&(s.b)<<endl;
c=(int*)((long)&s.a+0x04);
cout<<*c<<endl;
c=(int*)((long)&s+0x04);
cout<<*c<<endl;
return 1;
}

&s+0x04 想把它转换成s.b的地址  要先把地址看做LONG 再加上4;
不然看做结构的地址加上4 就是加上了4个S结构的长度;

这和 INT*P +1和 CHAR *P +1  
(即使P一致,但是执行加1后就不同了)
2010-6-30 16:36
0
雪    币: 55
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
谢谢楼上 学习了
2010-6-30 17:02
0
游客
登录 | 注册 方可回帖
返回
//