在函数中更改指针地址

e2e*_*2e8 2 c pointers

我需要在这里更改以便动物包含{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是一个选项.有另一种方法只是操纵指针?

Jam*_*lis 5

有另一种方法只是操纵指针?

不,因为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类似的函数,在循环中或按顺序复制数组元素).