插入指针数组

时间:2015-03-06 14:30:09

标签: c arrays pointers

请修复此程序。

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

arr[1]=arr;

*arr[1]=30;

printf("%d",arr);

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

2 个答案:

答案 0 :(得分:2)

你这里有一个严重的错误

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存储在数组中的第3个位置,如果您事先不知道大小,那么您需要使用malloc(),首先要向{int声明一个poitner 1}}

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(),这个函数会增加指向块的大小或指向a新的,如有必要,复制旧的内容,所以要使用它,你这样做

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的函数返回,当调用者完成使用它时,实际上您可以随时调用,同时数据将是有效的,对于如果你需要它的整个生命周期。

答案 1 :(得分:-1)

int arr[3] = {10,20, 0};

arr[2] = 30;

printf("%d, %d, %d\n",arr[0], arr[1], arr[2]);

您应该查找C语法,因为到目前为止您所做的任何事情都没有任何意义。