第一个问题的问题是您将数组的最后一个元素设置为 0 for 循环的每次迭代,因此在您的循环第一次通过后,它将是{1, 2, 4, 4, 0}
, next {1, 2, 4, 0, 0}
。
只需将arr[n - 1] = 0;
for 循环放在外面就足够了。同样:
编辑:更新循环控制语句,使其不会越界,感谢 hmjd
for(int i = 2; i < n-1; i++)
{
arr[i] = arr[i + 1];
}
arr[n - 1] = 0;
该元素本身不会被删除,它只会被设置为 0,其余的将向左移动。
至于第二个问题:您必须创建一个更大的新数组才能添加任何内容。
您需要的是malloc
,calloc
和free
函数。熟悉它们和一般的动态分配。一般的想法是malloc
或calloc
一个比当前数组大一号的数组,将元素复制到要插入另一个元素的空间,插入该元素,然后复制数组的其余部分。之后,不要忘记free
旧数组并将其设置为指向新数组的指针。
int size = 4;
int arr[] = (int *) calloc(size, sizeof(int));
int insertTo = 2;
int insert = 50;
int tempArr[] = (int *) calloc(size+1, sizeof(int));
for(int i = 0, int j = 0; i < size; i++, j++) {
if(j == insertTo) {
tempArr[j] = insert;
i--; //to offset the cycle incrementation
} else {
tempArr[j] = arr[i];
}
}
free(arr);
arr = tempArr;
size++; // Don't forget to update the size
为简洁起见,省略了分配检查。
第一个问题可以使用类似的方法来更改数组的大小。