C-将void *转换为阵列



我需要将一个数组转换为具有void*元素并返回另一个数组的结构中的数组:

unsigned short array[size];
//do something to the array
typedef struct ck{
void * arg1;
void * arg2;
void * arg3;

} argCookie;

argCookie myCookie;
myCookie.arg2=malloc(sizeof(array));//alloc the necessary space
memcpy(myCookie.arg2,&array,sizeof(array));//copy the entire array there

//later....

unsigned short otherArray[size];
otherArray=*((unsigned short**)aCookie.arg2);

碰巧的是,最后一行不会编译...这是为什么?显然,我在某个地方搞砸了...

谢谢。

您不能通过分配指针来复制数组,数组不是指针,并且不能分配给数组,您只能分配给数组的元素。

您可以使用memcpy()复制到您的数组中:

//use array, or &array[0] in memcpy,
//&array is the wrong intent (though it'll likely not matter in this case
memcpy(myCookie.arg2,array,sizeof(array));
//later....
unsigned short otherArray[size];
memcpy(otherArray, myCookie.arg2, size);

假设您知道size,否则您也需要将大小放在其中一个cookie中。根据您的需求,您可能不需要复制到otherArray中,只需直接使用cookie的数据:

unsigned short *tmp = aCookie.arg2;
//use `tmp` instead of otherArray.

您无法分配给数组。而不是

otherArray=*((unsigned short**)aCookie.arg2);

如果知道大小:

,请再次使用memcpy
memcpy(&otherArray, aCookie.arg2, size*sizeof(unsigned short));

如果您不知道尺寸,那么您就无法运气。

unsigned short* otherArray = (unsigned short*)aCookie.arg2

然后,您可以使用otherArray[n]访问元素。当心界外索引。

相关内容

  • 没有找到相关文章

最新更新