我需要将数组转换为具有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);
碰巧这最后一行不会编译...... 这是为什么?显然我已经搞砸了......
谢谢。
答案 0 :(得分:1)
您无法分配数组。而不是
otherArray=*((unsigned short**)aCookie.arg2);
如果您知道尺寸,请再次使用memcpy
:
memcpy(&otherArray, aCookie.arg2, size*sizeof(unsigned short));
如果你不知道大小,那你就不走运了。
答案 1 :(得分:1)
您不能通过为数组赋值指针来复制数组,数组不是指针,也不能分配给数组,只能分配给数组的元素。
您可以使用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.
答案 2 :(得分:0)
unsigned short* otherArray = (unsigned short*)aCookie.arg2
然后您可以使用otherArray[n]
来访问元素。谨防一个越界索引。