要求是这样的:
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;
}