Вставка элемента в заданную позицию в массиве, последние несколько элементов не отображаются в массиве

#c

#c

Вопрос:

Я пытался вставить элемент в заданный массив, но в ,выводе последний элемент не используется кодом, приведенным ниже. Кто-нибудь, пожалуйста, может объяснить мне, почему это так?? На самом деле я не знаю, как дать ссылку, но я кое-что попробовал. Что касается ссылочной части, я дал ссылку на n, но при вызове функции она выдает ошибку времени выполнения. Кто-нибудь может мне помочь в этой части?

 #include<stdio.h>
int insertAtGP(int *a, int *n, int item, int k)
{
    int j;
    j = *n - 1;
    while(j >= k) 
    {
        a[j 1] = a[j];
        j--;
    }
    a[k] = item;
    (*n)  ;
}
int main()
{
    int i;
    int arr[] = {45, 50, 25, 61, 34};
    insertAtGP(arr, 5, 30, 3);
    for(i = 0; i <= 6; i  )
    {
        printf(" %dn ",*(arr  i));
    }
}
  

Комментарии:

1. Ваш массив «arr» содержит только пять элементов, и вы делаете что-то с шестым. Может случиться все, что угодно, и обычно ничего хорошего.

2. Ваш for цикл перебирает 5 элементов, поэтому, даже если мы проигнорируем неопределенное поведение, вызванное доступом к 6-му элементу массива размером 5, вы просто не можете ожидать, что на выходе будет больше 5 элементов.

Ответ №1:

Ваш код имеет неопределенное поведение.

Вы не можете корректно индексировать дальше конца массива, и в вашем массиве есть место только для количества элементов, присутствующих в инициализаторе, то есть 5.

Ответ №2:

 int arr[6] = {45, 50, 25, 61, 34};//Size after insertion is necessary. 5 < array size
int size = 5;//Actual data size of the original
insertAtGP(arr, amp;size, 30, 3);//2nd argument requires a pointer to int,
for(i = 0; i < size; i  )//use the updated value. = Does not include