Другие языки программирования и технологии
Помогите с программой на Си/Си++
Хочу в одномерном массиве задать размерность и диапазно динамически.Подскажите как сделать.Вроде бы через malloc нужно,но не пойму как...
Во-первых, если речь идет о языке С++, то там имеется контейнер vector, который и является массивом с динамически задаваемым количеством элементов!
Вы можете объявить
#include <vector>
int main()
{
std::vector<int> v;
v.push_back( 10 );
return 0;
}
То есть ч помощью метода push_back() вы можете занести в вектор столько элементов, сколько хотите. Вектор сам позаботится о выделении необходимой памяти. ( Число 10 в данном примере - это значение, которое будет содержать первцый элемент массива. Я выюрал его произвольно) .
Либо вы можете сами выделять в куче память с помощью оператора new/
Например,
#include <memory>
#define MAX_SIZE 10
int main()
{
int *array;
array = new int[ MAX_SIZE];
// используете массив, как хотите
delete [] array;
return 0;
}
Проблема только в том, что если в процессе работы вам надо увеличить размер массива, например, сделать не 10 элементов, а 20, то вам надо снова выделить память на 20 элементов, переписать из старого массива в новый, а старый удалить. Например
#include <memory>
#include <cstring>
#define MAX_SIZE 10
#define NEW_MAX_SIZE 20
int main()
{
int *array;
array = new int[ MAX_SIZE];
// используете массив, как хотите
int *tmp;
tmp = new int[NEW_MAX_SZIE]
std::memcpy( tmp, array, MAX_SIZE * sizeof( int ) );
delete [] array;
array = tmp;
return 0;
}
В языке С это делается с помощью функций malloc() и free() из библиотеки stdlib.
Например
#include <stdlib.h>
#define MAX_SIZE 10
int main()
{
int *array;
array = malloc( MAX_SIZE * sizeof( int ) );
// используете массив, как хотите
free( array );
return 0;
}
Вы можете объявить
#include <vector>
int main()
{
std::vector<int> v;
v.push_back( 10 );
return 0;
}
То есть ч помощью метода push_back() вы можете занести в вектор столько элементов, сколько хотите. Вектор сам позаботится о выделении необходимой памяти. ( Число 10 в данном примере - это значение, которое будет содержать первцый элемент массива. Я выюрал его произвольно) .
Либо вы можете сами выделять в куче память с помощью оператора new/
Например,
#include <memory>
#define MAX_SIZE 10
int main()
{
int *array;
array = new int[ MAX_SIZE];
// используете массив, как хотите
delete [] array;
return 0;
}
Проблема только в том, что если в процессе работы вам надо увеличить размер массива, например, сделать не 10 элементов, а 20, то вам надо снова выделить память на 20 элементов, переписать из старого массива в новый, а старый удалить. Например
#include <memory>
#include <cstring>
#define MAX_SIZE 10
#define NEW_MAX_SIZE 20
int main()
{
int *array;
array = new int[ MAX_SIZE];
// используете массив, как хотите
int *tmp;
tmp = new int[NEW_MAX_SZIE]
std::memcpy( tmp, array, MAX_SIZE * sizeof( int ) );
delete [] array;
array = tmp;
return 0;
}
В языке С это делается с помощью функций malloc() и free() из библиотеки stdlib.
Например
#include <stdlib.h>
#define MAX_SIZE 10
int main()
{
int *array;
array = malloc( MAX_SIZE * sizeof( int ) );
// используете массив, как хотите
free( array );
return 0;
}
На с++ используй new и delete
int * mass; //определили указатель на будущий массив
int size;//переменная которая будет содержать размер массива
//как-то (как хочешь) задаем значение переменной size (>0)
mass = new int[size]; // выделяем память под массив
//инициализируем массив и используем его
delete []mass; //освобождаем память выделенную для массива.
на с
подключи библиотеку stdlib.h
и замени в предыдущем коде
mass = new int[size];
на
mass=malloc(size*sizeof(int));
а вместо
delete []mass;
напиши
free(mass);
int * mass; //определили указатель на будущий массив
int size;//переменная которая будет содержать размер массива
//как-то (как хочешь) задаем значение переменной size (>0)
mass = new int[size]; // выделяем память под массив
//инициализируем массив и используем его
delete []mass; //освобождаем память выделенную для массива.
на с
подключи библиотеку stdlib.h
и замени в предыдущем коде
mass = new int[size];
на
mass=malloc(size*sizeof(int));
а вместо
delete []mass;
напиши
free(mass);
Похожие вопросы
- Помогите с программой на си! Программа в описании
- Помогите написать программу на Си
- помогите написать программу на Си
- Помогите откомпилировать программу(язык Си)
- помогите написать программу на си
- Помогите написать программу в СИ. буду очень благодарин
- помогите написать программу в Си
- помогите написать программу на языке Си: В одномерном массиве целых чисел заменить максимальное значение минимальным.
- Помогите с программой на Си. (создание многомерных динамических массивов)
- Помогите написать программу на Си.