我在C中定义了一个数组。我想实现一个代码,我可以在数组中间插入一个新值(数组中除了第一个和最后一个位置之外的任何位置)。因此,我写了一个函数,它将接受三个参数-数组,我想放置新值的位置,和将要插入位置的值。但是当我执行程序时,最后一个元素丢失了,它显示的是最后一个值5,但是在旧数组中,最后一个元素不是5。你能告诉我我哪里做错了吗?
#include <stdio.h>
void resize(int arr[], int position, int value);
int main(void)
{
int arr[] = { 10, 20, 60, 80, 10 };
resize(arr, 3, 90);
for (int i = 0; i < 6; i++)
{
printf("%d\n", arr[i]);
}
}
void resize(int arr[], int position, int value)
{
for (int i = 5; i >= position; i--)
{
arr[i] = arr[i - 1];
}
arr[position - 1] = value;
}
字符串
2条答案
按热度按时间of1yzvn41#
已定义的数组不能 * 调整大小 *。已分配的数组可以重新分配。您的函数
resize
具有未定义的行为,因为它将arr[4]
存储到arr[5]
中,这超出了数组的结尾。下面是重新分配数组的修改版本:
字符串
输出量:
型
jdgnovmf2#
我已经更新了以前的代码,现在它可以添加一个值到数组中所需的位置。
字符串
//通过从用户获取输入来初始化数组的大小
型
//为数组分配空间
型
//对数组取值
型
//打印当前数组
型
//获取位置输入
型
//获取值
型
//将数组大小递增到新的大小
型
//创建数组
型
//打印调整大小的数组
型
//在不同的整数指针中为新值分配空间
型
//初始化arr 1中的所有值都与arr 2相同
型
//在新数组中将数组元素移位1;这是ex:第4个位置的元素现在在第5个位置
型
//将值插入位置,位置为position - 1 index
型
//现在再次将新的arr 1指向新的内存,所以新的内存指向新的更新内存
型