请教一个回调函数返回的结构体指针能够直接赋值吗

nena2749 2015-12-03 09:16:10
结构体指针是一个回调函数的形参,函数回调后结构体被改变,可以从里面读取回调的内容,形式是void fun(struct xxx* p1)这样的。

我在LINUX下开了一块共享内存,内存类型与结构体相同,但我直接赋值后该共享内存的指针内容为空,只能一项一项赋值过去才行,按理说我赋值后共享内存的指针应该就是把回调函数中的指针入口传递过去了,我访问新的指针应该来说就是一样的,但结果却是不行,为什么?

struct xxx *p2;
p2=p1;

这样内容都是空的,

只能p2->kkk=p1->kkk
......
如果结构体中有大量内容,不是会累死啊
...全文
244 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
神游天外 2015-12-03
  • 打赏
  • 举报
回复
p2=p1,这种形式只是浅拷贝,即只把结构体的指针拷贝了,而里面的数据地址并没有被拷贝,memcpy可以进行深拷贝,数据地址也会被拷贝
lm_whales 2015-12-03
  • 打赏
  • 举报
回复
另外结构体赋值,如果是C++类差不多作用的结构体,内部的指针指向的数据,并没有被复制过来,而是直接bitcopy的指针。
lm_whales 2015-12-03
  • 打赏
  • 举报
回复
struct xxx x; struct xxx y,*p1=y; struct xxx *p2=& x; call(callBack, p1);//这样就可以了,值在y中 x=*p1;//如果需要转储,可以这样 除非C版本低 结构体可以直接赋值
paschen 2015-12-03
  • 打赏
  • 举报
回复
C语言下的结构体可以直接memcpy,把另一个结构体内存数据复制过来
nena2749 2015-12-03
  • 打赏
  • 举报
回复
memcpy这个我知道可以使用,但我想知道为什么传递不过去
Saleayas 2015-12-03
  • 打赏
  • 举报
回复
使用 memcpy struct S{ }; memcpy(&d, &s, sizeof(struct S));

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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