我需要在这里更改以便动物包含{3,4}?
void funct(unsigned char *elf)
{
unsigned char fish[2]={3,4};
elf=fish;
}
int main()
{
unsigned char animal[2]={1,2};
funct(animal);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
编辑:我看到memcpy是一个选项.有另一种方法只是操纵指针?
有另一种方法只是操纵指针?
不,因为animal
不是指针. animal
是一个数组.当你将它作为参数传递给函数时,它会衰减到指向它的第一个元素的指针,就像你说的那样&animal[0]
.
即使您使用指针并将指针指向它funct
,它仍然无法工作:
void funct(unsigned char** elf)
{
unsigned char fish[2] = { 3, 4 };
*elf = fish; // oh no!
}
int main()
{
unsigned char animal[2] = { 1, 2 };
unsigned char* animal_ptr = animal;
funct(&animal_ptr);
}
Run Code Online (Sandbox Code Playgroud)
行后标有"哦不!" 所述fish
阵列不再存在; funct
返回时它会消失,因为它是一个局部变量.您必须使其静态或动态分配,以便在函数返回后仍然存在.
即便如此,它仍然与你想要的不一样,因为它永远不会改变animal
; 它只会修改animal_ptr
指向的位置.
如果你有两个数组,并且想要将一个数组的内容复制到另一个数组中,则需要使用memcpy
(或滚动自己memcpy
类似的函数,在循环中或按顺序复制数组元素).