gpt4 book ai didi

C 指针帮助 : Array/pointer equivalence

转载 作者:太空宇宙 更新时间:2023-11-04 01:36:13 25 4
gpt4 key购买 nike

在这个玩具代码示例中:

int MAX = 5;

void fillArray(int** someArray, int* blah) {
int i;
for (i=0; i<MAX; i++)
(*someArray)[i] = blah[i]; // segfault happens here
}

int main() {
int someArray[MAX];
int blah[] = {1, 2, 3, 4, 5};

fillArray(&someArray, blah);

return 0;
}

...我想填充数组 someArray,并让更改在函数外持续存在。

这是一个非常大的家庭作业的一部分,这个问题解决了这个问题,但不允许我复制解决方案。我得到了一个接受 int** 作为参数的函数签名,我应该编写逻辑代码来填充该数组。我的印象是,在 fillArray() 函数中取消引用 &someArray 会给我所需的数组(指向第一个元素的指针),并且在该数组上使用括号中的数组元素访问会给我需要分配的必要位置.但是,我无法弄清楚为什么会出现段错误。

非常感谢!

最佳答案

I want to fill the array someArray, and have the changes persist outside the function.

只需将数组传递给函数,因为它衰减到指向第一个元素的指针:

void fillArray(int* someArray, int* blah) {
int i;
for (i=0; i<MAX; i++)
someArray[i] = blah[i];
}

并调用:

fillArray(someArray, blah);

对元素的更改将在函数外部可见。

如果实际代码是在 fillArray() 中分配一个数组,则需要一个 int**:

void fillArray(int** someArray, int* blah) {
int i;
*someArray = malloc(sizeof(int) * MAX);
if (*someArray)
{
for (i=0; i<MAX; i++) /* or memcpy() instead of loop */
(*someArray)[i] = blah[i];
}
}

并调用:

int* someArray = NULL;
fillArray(&someArray, blah);
free(someArray);

关于C 指针帮助 : Array/pointer equivalence,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13897133/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com