Как добавить элемент в конец массива на с? не c++, а с - Вопросы по С+

Вопрос Как добавить элемент в конец массива на с? не c++, а с

Регистрация
24 Май 2013
Сообщения
88
Репутация
0
Спасибо
0
Монет
0
Как добавить элемент в конец массива на С? Не C++, а С
 

Jop

Capitan

Jop

Capitan
Регистрация
28 Дек 2013
Сообщения
96
Репутация
0
Спасибо
0
Монет
0
В языке С вы можете использовать функцию realloc для изменения размера массива. Эта функция изменяет размер блока памяти, выделенного ранее с помощью malloc или calloc, на новый размер. Если новый размер больше старого, то дополнительная память не инициализируется. Если новый размер меньше старого, то содержимое блока памяти урезается до нового размера. Вот пример кода, который добавляет элемент в конец массива: #include
#include

int main() {
int n = 5;
int *arr = malloc(n * sizeof(int));
for (int i = 0; i < n; i++) {
arr = i;
}

// Добавление элемента в конец массива
n++;
arr = realloc(arr, n * sizeof(int));
arr[n - 1] = n - 1;

for (int i = 0; i < n; i++) {
printf("%d ", arr);
}
printf("\n");

free(arr);
return 0;
}
Этот код создает массив из 5 элементов, заполняет его значениями от 0 до 4, затем добавляет элемент в конец массива и выводит его содержимое. Вывод программы: 0 1 2 3 4 5. Обратите внимание, что использование realloc может привести к перемещению блока памяти в другое место, поэтому после вызова realloc указатель на старый блок памяти может стать недействительным. Поэтому всегда следует использовать возвращаемое значение realloc для работы с новым блоком памяти.
 
Регистрация
17 Ноя 2012
Сообщения
73
Репутация
0
Спасибо
0
Монет
0
#include
#include
int main(void) {
int* vector = NULL;
size_t length = 0;
size_t i = 0;
int value = 0;
printf("Length: ");
scanf("%zu", &length);
vector = (int*)malloc(length * sizeof(int));
if (vector == NULL) exit(0);
printf("Values: ");
while (i < length) {
scanf("%i", &vector);
++i;
}
for (i = 0; i < length; ++i) printf("%i ", vector);
puts("");
printf("Value: ");
scanf("%i", &value);
vector = (int*)realloc(vector, length + 1);
vector[length] = value;
++length;
for (i = 0; i < length; ++i) printf("%i ", vector);
puts("");
free(vector);
return 0;
}
 
Регистрация
3 Авг 2013
Сообщения
77
Репутация
0
Спасибо
0
Монет
0
Это заговор рептилоидов из РЕНтв... Если в конец (концом массива называют позицию следующую за последним элементом) можно что-то добавить, то какой же это конец?
Способ первый - виртуальный размер. Берете массив неизменного реального размера например в 100 элементов, а заказчику на полном серьезе говорите что это массив на 1 элемент. И если он чтото захочет добавить в конец, просто добавляете и говорите что теперь у него размер 2. И так далее. А когда он дойдет до 100, просто берете бабки и сматываетесь на Кипр.
Способ второй - создавать другой массив с размером больше первого, перекопировать в него все элементы с первого + добавляемый в конец. После чего первый удаляете а у нотариуса завеяете что 2-й на самом деле является первым. Известная практика в особых кругах. В случае если второй создать не удасться или будут искать первый - сматываетесь на Кипр.
 
Сверху Снизу