关于填充void*buf的一次小总结

要求是这样的:

void *是某个函数的指针(fun(void * result)).

result的格式是这样的,一个int值,若干个对象指针

假设是OBJ类型的对象

1,首先,我试了这种方法

OBJ * p = NULL;

memcpy(result,p)

这样是出问题的。因为memcpy并不是将p的指针内容拷到result,而是将p指向的内容(也就是NULL)拷过去

这也说明我在编程的时候,有个问题,想当然的做事,不严谨。

2,然后我用了这种方法

(OBJ*)result = p

这种方法也是不对的,因为result是左值,不能被改变。

3。用了结构体方法

 struct  AAA 

{

    int     x;

    OBJ * p;

}A;

A a;

memcpy(result,&a,sizeof(a));

但是这样,解决不了解析时候问题

4.最终用了这种方法

OBJ * p = NULL;

memcpy(result,&p)

 

然后在解析的时候,我发现了一个奇怪的现象

 

memcpy(&t,result,sizeof(int));

 这样,t能得到正确的值

 

cout<<(*((TT*)result)).s<<endl;

但是这样,却得不到正确的值

 

 

也就是说内置类型可以强转指针,而类类型却不可以。期待高手的回答

 

 

 

 

 

 

 

 

附上测试代码:

#include<stdio.h>

#include<stdlib.h>

#include<iostream>

#include<string.h>

using namespace std;

class TT

{

public:

    int s;

};

int main()

{

    TT t1;

    TT t2;

    t1.s = 1;

    TT* p1 = &t1;

    char *p = new char[100];

    char * x = p ;

    char * f = p;

    int tint  = 2;

    memcpy(p,&tint,sizeof(tint));

    p += sizeof(tint);

    memcpy(p,&p1,sizeof(p1));

    p += sizeof(p1);

    memcpy(p,&tint,sizeof(tint));

 

   int t; 

    memcpy(&t,x,sizeof(int));

    cout<<*(int*)x<<endl;

   // cout<<t<<endl;

    x+=sizeof(int)/sizeof(char);

    TT* ppT;

    memcpy(&ppT,x,sizeof(TT*));

    cout<<ppT->s<<endl;   

    x += sizeof(TT*);

    cout<<*(int*)x<<endl;

 

    //cout<<(*((TT*)x)).s<<endl;

 

    delete []f;

    return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值