@defild

Как откинуть 5 число с массива?

Как откинуть 5 число с массива на С?
  • Вопрос задан
  • 82 просмотра
Пригласить эксперта
Ответы на вопрос 3
GavriKos
@GavriKos
Скопировать в новый массив исключая пятое число. Вручную. Фором.
Ответ написан
@antares4045
наиболее прозрачный на мой взгляд способ (си уже позабылось, а под рукой компилятор только плюсов был: возможны некоторые синтаксические шероховатости)

#include "stdio.h"

void shiftArray(int* array, int* length, int startIndex=5){
    int index;
    if(startIndex < *length){
        for(index=startIndex + 1; index < *length; index++){
            array[index-1] = array[index];
        }
        *length -= 1;
    }
}


int main()
{
    int len1 = 10;
    int len2 = 3;
    int arr1[len1];
    int arr2[len2];

    for(int i=0;i<len1;i++)
        arr1[i] = i;
    for(int i=0;i<len2;i++)
        arr2[i] = i;
    shiftArray(arr1, &len1);
    shiftArray(arr1, &len2);
    for(int i=0;i<len1;i++)
        printf("%d ", arr1[i]);
    printf("\n");
    for(int i=0;i<len2;i++)
        printf("%d ", arr2[i]);
    printf("\n");
    return 0;
}
Ответ написан
Комментировать
@res2001
Developer, ex-admin
Просто так взять и удалить элемент из массива на Си нельзя.
Из статического массива удалить нельзя ничего в принципе - его размер не меняется никогда.
В динамических массивах могут быть варианты:
Вы можете переписать хвост массива, начиная с шестого элемента, на один элемент вперед, т.е. 6 элемент станет 5 и т.д. Но при этом в конце образуется не используемый элемент, избавится от него можно перевыделением массива с помощью realloc, например. Но если это делать, то проще сразу выделить память под новый массив и скопировать весь первый массив, кроме удаляемого элемента, как писал GavriKos.
Другой вариант - помечать подобные не используемые элементы каким-то образом. Либо писать в них какое-то значение, обозначающее для вас, что это не используемый элемент, либо хранить где-то отдельно используемый размер массива (так сделано в std::vector).
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы