gpt4 book ai didi

c - 从函数更新指向 c 数组的指针

转载 作者:太空宇宙 更新时间:2023-11-04 02:09:47 24 4
gpt4 key购买 nike

假设我在 c 中有一个名为 array_push 的函数。

void array_push(int *array_pointer, int array_length, int val) {
int i;
int *temp_array = malloc(sizeof(int) * (array_length + 1));

for (i = 0; i < array_length; i++) {
temp_array[i] = *array_pointer;
array_pointer++;
}

temp_array[array_length] = val;
*array_pointer = temp_array;
}

如何更新指针 *array_pointer 使其指向 temp_array 并且程序的其他部分可以使用新数组?允许我做类似的事情

int t[2] = {0,2};
array_push(t, 2);
/* t should now contain {0,2,3} */

最佳答案

您需要将array_pointer 变成一个指向指针的指针:

void array_push(int **array_pointer, int array_length, int val) {

(注意额外的星号)。

此外,您还需要更改调用站点,以便 t 是一个指针,而不是一个数组(您不能将数组指向其他地方)。最后,为了让调用者知道数组的新大小,array_length 也需要通过指针传递。

因此,您的代码的整体结构可能类似于:

void array_push(int **array_pointer, int *array_length, int val) {
int *temp_array = malloc(sizeof(int) * (*array_length + 1));
memcpy(temp_array, *array_pointer, sizeof(int) * *array_length);
temp_array[(*array_length)++] = val;
free(*array_pointer);
*array_pointer = temp_array;
}

int main() {
int n = ...;
int* t = malloc(sizeof(int) * n);
/* ... */
array_push(&t, &n, 2);
/* ... */
free(t);
}

请注意我是如何在堆上分配 t 并在 array_push() 中释放 *array_pointer 的。考虑到这一点,可以使用 realloc() 简化 array_push() 的大部分逻辑:

void array_push(int **array_pointer, int *array_length, int val) {
*array_pointer = realloc(*array_pointer, sizeof(int) * (*array_length + 1));
(*array_pointer)[(*array_length)++] = val;
}

关于c - 从函数更新指向 c 数组的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15847664/

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