如何取得一个 结构体 首地址偏移 n个字节的 地址

zpk1234 2008-05-09 03:03:48
比如说 有这样 一个结构体

struct a
{
int memb1;
int memb2;
int memb3;
}aa;

这个结构体aa的首地址 是 &aa,那么我该如何获得偏移首地址3的字节的地址呢?
请指教
...全文
421 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
remarqueqiqi 2010-03-16
  • 打赏
  • 举报
回复
我用C语言的,说说思路吧。

#include <stdio.h>

typedef struct a
{
int memb1;
int memb2;
int memb3;
}aa;

void main()
{
aa * t_a;
int * address;
t_a = (aa *)malloc(1);
address = &(t_a->imem3);
printf("address is %x", address );
}

babyofbaby 2008-05-13
  • 打赏
  • 举报
回复
(int*)&aa+0,(int*)&aa+1,(int*)&aa+2,这三个指针,分别指向memb1,memb2,memb3.
Wolf_FienD 2008-05-13
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 zpk1234 的回复:]
我自己觉得是

C/C++ code
(int)&aa + 3;
[/Quote]


你那是 移了 3*4 个 字节


应该是


[Quote=引用 1 楼 baihacker 的回复:]
C/C++ code(char*)&aa + 3
[/Quote]
zpk1234 2008-05-10
  • 打赏
  • 举报
回复
我自己觉得是

(int)&aa + 3;
Xshl5 2008-05-09
  • 打赏
  • 举报
回复

#include <iostream>
#include <cstdio>

using namespace std;

struct a
{
int memb1;
int memb2;
int memb3;
}aa;


int main(void)
{
aa.memb1=10;
aa.memb2=65;
aa.memb3=66; // 10 00 00 00 65 00 00 00 66 00 00 00 结构体里面的数据,十进制

int * ptrInt=(int*)&aa; // ptrInt指向成员memb1 (int型) 10 00 00 00
cout<<ptrInt<<endl;
cout<<*ptrInt<<endl;
char* ptrInt1=(char *)&aa+4; // 结构首地址起偏移4个字节 ptrInt1指向 65开始的字符串

printf("0x%08x,%s\n",ptrInt1,ptrInt1); // 字符串为两个字节,'A' + '\x00'

printf("0x%08x,%c\n",ptrInt1,*(ptrInt1+4)); // 打印ptrInt1+4指向的字符,'B'

return 0;
}



编译运行:

D:\workspace\test>g++ test0i.cc -o test0i

D:\workspace\test>test0i
0x445010
10
0x00445014,A
0x00445014,B
matrixdwy 2008-05-09
  • 打赏
  • 举报
回复
指针+3
帅得不敢出门 2008-05-09
  • 打赏
  • 举报
回复
沙发又被飞雪占了
healer_kx 2008-05-09
  • 打赏
  • 举报
回复
只能jf了。
babyofbaby 2008-05-09
  • 打赏
  • 举报
回复

aa.memb1=10;
aa.memb2=20;
aa.memb3=30;

int * ptrInt=(int*)&aa;
cout<<ptrInt<<endl;
cout<<*ptrInt<<endl;
ptrInt=(int*)&aa+2;
cout<<ptrInt<<endl;
cout<<*ptrInt<<endl;

运行一下看看结果就知道是不是你想要得答案了
baihacker 2008-05-09
  • 打赏
  • 举报
回复
(char*)&aa + 3

64,281

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧