我需要将一个数组转换为具有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]
访问元素。当心界外索引。