为C中的结构指定字节指针
这个问题让我很恼火,但我想避免使用memcpy这种显而易见的解决方案为C中的结构指定字节指针,c,pointers,reference,variable-assignment,dereference,C,Pointers,Reference,Variable Assignment,Dereference,这个问题让我很恼火,但我想避免使用memcpy这种显而易见的解决方案 struct Person { //Some variables }; void doSomething(char* pointerToSomeone) { struct Person bob; //Assign pointerToSomeone to bob, somehow... } 在上面的例子中,pointerToSomeone是指向Person结构的指针。 我该如何分配给鲍勃?当然有可能
struct Person
{
//Some variables
};
void doSomething(char* pointerToSomeone)
{
struct Person bob;
//Assign pointerToSomeone to bob, somehow...
}
在上面的例子中,pointerToSomeone是指向Person结构的指针。
我该如何分配给鲍勃?当然有可能
我已经尝试了很多我认为是合理的强制转换、遵从等,但没有成功(编译器错误)。你不能。但是,如果确定
指针tosomeone
确实是指向人的指针,则可以将bob
作为指针并使用类型转换:
struct Person *bob = (struct Person *) pointerToSomeone;
不能将指向char
的指针指定给struct
,但可以将char*
指向的内容复制到struct
中,如下所示:
memcpy(&bob, pointerToSomeone, sizeof(struct Person));
如果指针tosomeone
是非类型化的,更常见的做法是使用void*
而不是char*
,只需将指针tosomeone
指向的结构复制到bob
,并使用memcpy
,只需确保指针tosomeone确实是指向结构人的指针
void doSomething(char* pointerToSomeone)
{
struct Person bob;
memcpy( &bob , pointerToSomeone , sizeof( struct Person ) ) ;
}
您可以简单地这样做(假设它是有效的强制转换):
请注意,您正在复制指针堆栈,而不是像这样引用它:
struct Person* bob = (struct Person*) pointerToSomeone;
如果这会改变指针tosomeone的大小,那么应该使用**而不是*。首先,如果指针tosomeone确实指向一个人,为什么会声明为“char*”?它应该是指向结构的指针,否则为void*。第二,你所说的“分配给鲍勃”实际上是什么意思?你的意思是指向bob结构吗?这只是“pointerToSomeone=&bob”,它对函数的作用域有效(但不在函数的作用域之外)。你的意思是要将数据从一个结构复制到另一个结构吗?这需要memmove()。那你到底想干什么?宾果。我知道用我现在的方式使用局部变量是毫无意义的!
struct Person* bob = (struct Person*) pointerToSomeone;