Передача динамического массива в функцию
У меня задача передать в функцию в качестве параметра динамический 2-хмерный массив и получить результат. Тупо возвращать как результат указатель он почему-то не хочет. Кто что может что-нить подсказать?
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:
Передача динамического массива в функцию
void create_matrix(float **matr,float * mass,int n1);.
Передача динамического массива в функцию
Помогите разобраться, не могу понять где ошибка. Отлаживал, программа "вываливается" при вызове.
Передача динамического массива в функцию
Скажите пожалуйста, почему при передаче динамического массива в функцию, адрес локальной переменной.

Передача динамического массива в функцию
Добрый вечер! Пытаюсь передать динамический массив a с размером n в функцию ii, изменить его.
Супер-модератор
8783 / 2536 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
ка вариант используй три параметра — два указателя на ходные данные, и один — как выходной, потому что при передаче в функцию параметра по указателю позволяет его изменять и изменения будут переданы в основную функцию, т.е. сохраняться при дальнейшем выполнении. мутное что-то сказал.
Регистрация: 20.11.2008
Сообщений: 81
Что-то я не понял. Указатель на что тебе нужно возвращать. Да и как ты создаешь тот указатель, который возвращаешь.
295 / 55 / 5
Регистрация: 22.05.2008
Сообщений: 788
Не возможно создать двухмерный динамический массив. Компилятор тебя пошлет.
сцуко киборг
103 / 30 / 4
Регистрация: 11.09.2008
Сообщений: 193
Как вариант можешь создать класс, содержащий массив. И его передавать куда надо.
Тем более, что «динамический двумерный массив» всёравно, как верно заметил Spo1ler, реализовать «влоб» невозможно.
Регистрация: 13.10.2008
Сообщений: 144
Ну, не знаю, на сколько это правильно но я делаю так: //прототип функции прин. этот массив сцуко киборг Если так, то ничего возвращать не надо. Массив передается в подпрограмму «в оригинале», и все изменения в подпрограмме будут отражаться на нем и так. Тем более, функция типа void в принципе ничего не должна возвращать т.е. что бы ты не написал после return, компилятор будет ругаться. А так, как написанно — по-моему правильно. Ничего изменять не надо. нубик программист) void myFunction(int **, int n, int m) Добавлено через 5 минут 48 секунд вот так будет выглядеть функция двухмерного динамического массива A_etot_ne_zanyat, инженер-системотехник Мегатрон, этот код не правильный. Добавлено через 8 минут 16 секунд нубик программист) 1464 / 965 / 160 нубик программист) int n; инженер-системотехник Мегатрон, в функции можно делать что угодно, и создавать динамические массивы тоже, просто по условию задачи массив уже есть и его нужно передать в функцию, а не создавать там 87844 / 49110 / 22898 Передача динамического массива в функцию Передача динамического массива в функцию Передача динамического массива в функцию Передача в функцию динамического массива Добрый день! пытаюсь разобраться что лучше и как передавать ? Комментировать Зачем усложнять? Динамический массив, как у тебя - это указатель на массив указателей, вот его и передавай. А лучше всего конечно vector. Ответ написан более трёх лет назад так вот например я передаю int** array2D = new int*[SIZE] - вот это что значит int*[SIZE] - еще разыменование ? мне не понятно где то пишут что когда передаешь указатель в функцию ты ты должен отдать ссылку на объект Вот кусок кода. Если разкомментировать вывод элементов массива на экран в main, то происходит ошибка сегментирования. Из-за того, что я неправильно передаю массив функции и он не изменился на самом деле и мы выходим за его границы? Как тогда правильно передавать динамический массив (он же сам по себе уже указатель)? Или в чем дело, подскажите пожалуйста. Пытался изменить объявление на и передавать но запутался в дальнейшем. 94731 / 64177 / 26122 Не получается адрес динамического двумерного массива передать, как аргумент функции Передача массива как аргумент функции Передача динамического массива в функции Передача динамического массива функции 133 / 131 / 51 Как тогда правильно передавать динамический массив Т.е. для массива двумерного передаем: ( указатель, количество строк, количество столбцов ). Слышала, что массив можно передавать в функцию в виде указателя. Откуда можно взять этот указатель? И как потом через него получать доступ к элементам исходного массива? Заранее спасибо. Отслеживать Сортировка: Сброс на вариант по умолчанию Вас интересует это? Если нет - сформулируйте свой вопрос поточнее. Отслеживать Когда говорят про передачу массива в виде указателя, на самом деле подразумевают передачу пары «указатель на первый элемент массива — количество элементов массива»: Доступ же к элементам производится, как и в случае обычных массивов, через индексацию (при этом мы притворяемся, что указатель base — это и есть сам массив): Данный фокус работает, потому что переменные-массивы — это на самом деле замаскированные указатели на участки фиксированного размера с данными этого массива. То есть никакой технической разницы между массивом и указателем на его первый элемент нет. Теперь о том, почему мы передаём количество элементов (параметр count ). Дело в том, что пока мы работаем с переменной-массивом, компилятор знает его размер и может в любой момент предоставить его нам (через sizeof(array) / sizeof(array[0]) ). Однако, как только мы начинаем работать с указателями, всякая информация о массиве теряется, а потому мы должны передавать её явно, вместе с указателем. При создании же динамического массива мы сразу же получаем указатель, а потому вынуждены хранить и передавать количество его элементов явно. Количество же нужно только для того, чтобы проверять, не обращаемся ли мы за пределы массива.
//создаем динам. 2-мерный массив
int n=10;
int **arr = new int *[n];
for(int i=0;i
void myFunction(int **, int rows, int columns);
//где rows-кол. строк, columns-столбцов
103 / 30 / 4
Регистрация: 11.09.2008
Сообщений: 193
Регистрация: 04.06.2008
Сообщений: 348
int n=10;
int **arr = new int *[n];
for(int i=0;i
вот так чтоли динамический массив в функции будет1 2 3 4 5 6 7
void myFunction(int **, int n, int m) { int **arr = new int *[n] *[m]; for(int i=0;in;i++) arr[i] = new int[n]; }
MCSD: APP BUILDER
8794 / 1073 / 104
Регистрация: 17.06.2006
Сообщений: 12,602
У меня задача передать в функцию в качестве параметра динамический 2-хмерный массив
Сие в принципе невозможно, т.к. в Си нет динамических массивов.
В С++ можно заюзать класс std::vector, но препод тебе скорее всего не разрешит (они обычно любят студням гемора подкинуть Ж)
А для остального подойдут предложенные здесь варианты двойных указателей.
111 / 111 / 5
Регистрация: 10.03.2009
Сообщений: 533
И зачем создавать в функции двумерный массив, если он должен в фуекцию передаваться?
Посмотри пост Feuer, он правилен
Регистрация: 04.06.2008
Сообщений: 348
И зачем создавать в функции двумерный массив, если он должен в фуекцию передаваться?
тоесть функция не может внутри себя создавать такой массив?![]()
Регистрация: 02.01.2009
Сообщений: 2,819
Записей в блоге: 1
Мегатрон, Вот те со старых запасов 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
#include templatetypename T> inline int arrlen(T *arr){ return static_castint>(_msize(arr)/sizeof(T)); } int **arrCreate(const int row,const int col){ int **arr = new int*[row]; for(int i = 0; i row; ++i) arr[i] = new int[col]; return arr; } void arrFree(int **arr){ int lenrow = arrlen(arr); for(int i = 0; i lenrow; ++i) delete[] arr[i]; delete[] arr; } void arrInput(int **arr){ int lenrow = arrlen(arr); int lencol = arrlen(arr[0]); for(int i = 0; i lenrow; ++i) for(int j = 0; j lencol; ++j){ std::cout<"arr["<"]"<"["
Регистрация: 04.06.2008
Сообщений: 348
cin >> n;
int **arr = new int *[n];
for(int i=0;i
111 / 111 / 5
Регистрация: 10.03.2009
Сообщений: 533
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь
Привет, помогите пожалуйста переделать программку в динамический массив и с помощью передачи.
Нужно передать динамический массив в функцию, описав как ссылку (&p). Но я не понимаю, как к нему.
извините мб глупый вопрос но не знаю как передать в функцию свой массив в 2 примере( в 1 примере.
Всем привет. Есть, например, функция, работающая с динамическим массивом. Допустим я заполняю этот.Как правильно передавать указатель или ссылку на динамический массив в функцию?
например у меня есть вот такой код : — в нем я передаю массив одномерный по ссылке ?
как правильно передать его по указателю ? я столкнулся при передачи по указателю что не понимаю где и что нужно разыменовывать например в этом кусочке кода !
следующий вопрос как передать тогда двумерный массив по ссылке и по указателю и как к ним обращаться ?for (int i = 0; i < N; i++) < for (int j = N - 1; j >i; j--) < if (mass[j - 1] >mass[j]) < T3 temp = mass[j]; mass[j] = mass[j - 1]; mass[j - 1] = temp;template void Bubble( T4 &mass,T3 N) < for ( int i =0;i
Решения вопроса 1
̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻#include #include const size_t SIZE = 10; // const нужен для защиты данных от модификации template void print1DArray(const T* array, const size_t size) < for (size_t i = 0; i < size; ++i) < std::cout std::cout template void print2DArray(const T* const* array, const size_t rows, const size_t columns) < for (size_t y = 0; y < rows; ++y) < for (size_t x = 0; x < columns; ++x) < std::cout std::cout std::cout template void printVector(const std::vector& vector) < for (const auto& item : vector) < std::cout std::cout int main() < int* array1D = new int[SIZE]; array1D[0] = 99; array1D[1] = 55; print1DArray(array1D, SIZE); delete[] array1D; int** array2D = new int*[SIZE]; for (size_t i = 0; i < SIZE; ++i) < array2D[i] = new int[SIZE * 2]; for (size_t j = 0; j < SIZE * 2; ++j) < array2D[i][j] = i + j; >> print2DArray(array2D, SIZE, SIZE * 2); for (size_t i = 0; i < SIZE; ++i) < delete[] array2D[i]; >delete[] array2D; std::vector vector(SIZE, 14); printVector(vector); return 0; >
Vadim kyklaed @kyklaed Автор вопроса
int *mass = new int [n]; - указатель на массив указателей
передача в функцию не по ссылке ?Передача динамического массива как аргумент функции
void readFile(const char* file, int ** array, int * size)
readFile(inputFile, &array, &size);
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
#include #include void readFile(const char* file, int * array, int * size) { FILE* f = fopen(file, "rt"); if (!f) { printf("Error! Can not open source file!\nExit!\n"); exit(EXIT_FAILURE); } *size = 0; while ( !feof(f)) { if (fgetc(f) == '\n') (*size)++; } array = (int * )malloc((*size) * sizeof(int)); rewind(f); int i = 0; for (; i *size; ++i) { fscanf(f, "%d", &array[i]); } fclose(f); } int main(int argc, char **argv) { if (argc 4) { printf("Error! Not enought of arguments!\nExit!\n"); exit(EXIT_FAILURE); } if (argc > 4) { printf("Error! Too many arguments!\nExit!\n"); exit(EXIT_FAILURE); } const char* inputFile = argv[1]; const char* outputFile = argv[2]; int * array /*= NULL*/; int size = 0; readFile(inputFile, array, &size); /*int i=0; for (; i < size; ++i) printf("%d%s",array[i],"\n"); >*/ }
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями: 
/* Лабораторная работа №3 Во всех вариантах необходимо написать три функции, которые будут.
Здравствуйте! Не подскажете - как передать функции массив как аргумент без использования Variant.
#include <iostream> #include <cstdlib> using namespace std; /*const*/ int k=3; //void sum.
Всем привет Возникла такая вот проблема. Создаю динамический массив а точнее 3, 2 одномерных и 1.
Регистрация: 25.05.2013
Сообщений: 233
Сообщение от Enesi 
Вот пример передачи динамического массива в функцию: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
#include #include #include #include //функция заполняет матрицу псевдослучайными данными void FillMatrix( int** matrix, const int size, const unsigned randRange, const int shift ); //функция печатает матрицу void PrintMatrix( int** matrix, const int size ); int main( void ) { srand( time( 0 ) ); // засеять генератор случайных чисел // запрашиваем у пользователя данные для матрицы int size; printf( "Введите размер квадратной матрицы " ); scanf( "%u", &size ); // объявляем нашу матрицу как указатель на int и выделяем необходимую память для нее int** a = ( int** ) calloc( size, sizeof(int*) ); int i; for ( i = 0; i size; ++i ) a[ i ] = ( int* ) calloc( size, sizeof(int) ); // заполняем матрицу псевдослучайными значениями типа int FillMatrix( a, size, 100, 0 ); // выводим матрицу на экран puts( "Исходная матрица" ); PrintMatrix( a, size ); // освобождаем память, выделенную под матрицу for ( i = 0; i size; ++i ) free( a[ i ] ); free( a ); return EXIT_SUCCESS; } void FillMatrix( int** matrix, const int size, const unsigned randRange, const int shift ) { int i, j; for ( i = 0; i size; ++i ) for ( j = 0; j size; ++j ) // shift - начальное значение диапазона, randRange - диапазон значений matrix[ i ][ j ] = shift + rand() % randRange; } void PrintMatrix( int** matrix, const int size ) { int i, j; for ( i = 0; i size; ++i ) { for ( j = 0; j size; ++j ) printf( "%4d ", matrix[ i ][ j ] ); puts( "" ); } }
Если массив квадратный, то количество строк == количетву столбцов == размер массива и передаем: ( указатель, размер массива ).Передача динамического массива в функцию через указатель
11.5k 8 8 золотых знаков 42 42 серебряных знака 69 69 бронзовых знаков
задан 4 ноя 2017 в 17:18
47 1 1 золотой знак 1 1 серебряный знак 3 3 бронзовых знака2 ответа 2
int func(int * arr, int n) < . >. int * array = new int[20]; func(array,20);
ответ дан 4 ноя 2017 в 17:21
218k 15 15 золотых знаков 117 117 серебряных знаков 229 229 бронзовых знаковint func(int* base, size_t count) < // . >int item = base[i];