gpt4 book ai didi

c - 插入指针数组

转载 作者:行者123 更新时间:2023-11-30 21:43:53 25 4
gpt4 key购买 nike

请修复此程序。

int *arr[2]={10,20};

arr[1]=arr;

*arr[1]=30;

printf("%d",arr);

我无法将 30 插入 arr[0],arr[1] 指向 &arr,然后我将 30 插入 arr[0]。

最佳答案

这里有一个严重错误

int *arr[2]={10,20};

您没有声明一个整数数组,它是一个 int 的数组指针,并且以这种方式初始化它是不正确的。

正确的做法是删除 * ,所以它看起来像

int arr[2] = {10, 20};

你不能简单地附加到它

arr[2] = 30;

因为仅分配了两个元素的空间,因此您无权访问 arr[2] 中的任何内容,所以你不能分配给它,如果你事先知道数组的长度那么你可以这样做

int arr[KNOWN_LENGTH_WHICH_IS_GREATER_THAN_TWO] = {10, 20};

然后

arr[2] = 30;

将存储30在数组的第三个位置,如果你事先不知道大小,那么你需要使用 malloc() ,首先声明一个指向 int 的指针

int *arr;

现在你让它像这样指向有效的内存

arr = malloc(2 * sizeof(int));

上面您刚刚请求了足够的空间来存储 2 int并用 arr 指向它指针,现在您必须检查指针是否确实指向有效的内存,如果出现问题并且 malloc()无法为您提供有效内存的地址,它返回一个特殊值 NULL ,所以你检查一下

if (arr == NULL)
pleaseAbortUsing_arr_ItsInvalid();

在上面的代码中,您需要尽力处理这个问题,您可以清理其他资源并返回 NULL如果您在函数中,有时甚至需要终止程序,但这取决于情况。

现在您的指针指向有效的内存,您可以将值存储到该内存中,通常的数组下标表示法可以完美地工作,所以只需

arr[0] = 10;
arr[1] = 20;

但同样,您无法添加第三个数字,因为没有足够的空间,但在这种情况下您可以使用 realloc() ,此函数将增加所指向 block 的大小或指向一个新 block ,并在必要时复制旧 block 的内容,因此要使用它,您需要这样做

void *pointer;

pointer = realloc(arr, 3 * sizeof(int));
if (pointer == NULL)
{
free(arr);
pleaseAbortUsing_arr_ItsInvalid();
}
arr = poitner;
arr[2] = 30;

最后当您使用 arr 完成后,再次尽最大努力处理错误。您调用free()像这样

free(arr);

如果arr将从您调用 free 的函数返回当调用者使用完它后,实际上您可以随时调用 free,同时如果需要,数据将在程序的整个生命周期内有效。

关于c - 插入指针数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28900911/

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