为什么数组的最后一个元素丢失了?

问题描述 投票:0回答:1

我已经在 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;
}
arrays c data-structures append missing-data
1个回答
0
投票

定义的数组不能被调整大小。已分配的数组可以重新分配。您的函数

resize
具有未定义的行为,因为它将
arr[4]
存储到
arr[5]
中,这超出了数组的末尾。

© www.soinside.com 2019 - 2024. All rights reserved.