Как вернуть двумерный массив из функции c
Перейти к содержимому

Как вернуть двумерный массив из функции c

  • автор:

Как вернуть двумерный массив из функции?

Вернуть двумерный массив из функции
Здравствуйте. Не так давно работаю с C++, поэтому очень нужна помощь. Есть такая функция: void.

Вернуть двумерный массив их функции
допустим есть в функции двумерный массив int** foo() < int a; return // a; >как.

Вернуть двумерный динамический массив из функции
Как написать функцию которая возвращает двумерный динамический массив?

Эксперт С++

13663 / 10580 / 6322
Регистрация: 18.12.2011
Сообщений: 28,248
См. образец
Образцы (шаблоны) программ для типовых задач
В функции

int ** Create( size_t n, size_t m );

как раз и создается двумерный массив, указатель на который и возвращается.
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь

Вернуть двумерный массив из функции и сделать проверку
Подскажите, пожалуйста, как правильно сделать возврат значения двумерного массива из функции и.

Как вернуть массив из функции?
у меня есть две функции: Одна должна возвращать три числа, а вторая двумерный массив 10Х10; Как.

Как вернуть двумерный массив из функции c

Всем привет, я запутался тут совсем, ошибку выдает:

int MAX, ***A, *LinksA; //для массива A два указателя для размерности //и еще один для передачи туда массива из функции Function int* Function(int *LinksArr) < int **arr; //двухмерный динамический массив //действия с динамическим массивом arr, где arr получит размерность return *arr; > int main() < //тут динамическим массивам A и LinksA придается размерность *A = Function(LinksA); //ну собственно само присваивание //но пишет ошибку что то вроде не могу конвертировать int* в int**. >

Форумчанин
Регистрация: 20.10.2010
Сообщений: 143

int MAX, *A, *LinksA; //для массива A два указателя для размерности //и еще один для передачи туда массива из функции Function int* Function(int *LinksArr) < int **arr; //двухмерный динамический массив //действия с динамическим массивом arr, где arr получит размерность return *arr; >int main() < //тут динамическим массивам A и LinksA придается размерность A = Function(LinksA); //ну собственно само присваивание //но пишет ошибку что то вроде не могу конвертировать int* в int**. >

451 -870-7(три)6. Выполняю работы на заказ, гарант честности — ВМ аттестат с 60+ БЛ без претензий
Пользователь
Регистрация: 10.10.2010
Сообщений: 24

хм а как тогда придать размерность для двухмерного динамического массива A, если там только один указатель?

Последний раз редактировалось Exeil; 24.10.2010 в 11:51 .
Форумчанин
Регистрация: 20.10.2010
Сообщений: 143

**A = Function(LinksA); //ну собственно само присваивание

попробуй тогда так. Когда компилятор начинает ругаться подобными еррорами — смотри где ты чего-то не учел. Насчет логичности всего этого — фиг знает, с динамикой пока не очень дружу

451 -870-7(три)6. Выполняю работы на заказ, гарант честности — ВМ аттестат с 60+ БЛ без претензий

Как в С возвратить массив из функции?

Если на минутку исключить из рассмотрения трюк с заворачиванием массива в struct , то в языке С невозможно буквально вернуть массив из функции (или передать массив в функцию). Массивы в С являются некопируемыми объектами — их нельзя никуда «передать» и ниоткуда «вернуть». Передавать или возвращать вы можете только указатели на массивы (на сами массивы или на их элементы).

По этой причине когда говорят о «возвращении массива из функции» в контексте языка С обычно понимают следующие варианты:

    Возвращение указателя на массив (на начало массива). Возвращаемый указатель не может указывать на автоматический массив, объявленный внутри этой функции, так как такой массив будет уничтожен при выходе из функции.
    Возвращаемый указатель может указывать на динамически выделенную память

char *bool_input(void) < char *result = malloc(/* размер */); /* Заполнение массива */ return result; >
char *bool_input(void) < static char result[/* размер */]; /* Заполнение массива */ return result; >
void bool_input(char result[], size_t size) < /* Заполнение массива */ >

Если вам так больше нравится, вы можете сделать и так

char *bool_input(char result[], size_t size) < /* Заполнение массива */ return result; >
struct Point < int xyz[3]; >; struct Point point_123(void) < return (struct Point) < < 1, 2, 3 >>; > 

Основным вариантом «возвращения массивов» в языке С является именно вариант номер 2. А вариант 1 при желании можно реализовать в виде надстройки над вариантом 2.

Как вернуть массив в функции C++

В этом уроке мы собираемся понять, как мы можем вернуть массив из функции в C++.

Методы возврата массива в функции C++

Как правило, возврат всего массива в вызов функции невозможен. Мы могли сделать это только с помощью указателей.

Более того, объявление функции с возвращаемым типом указателя и возвратом адреса массива типа C в C++ работает не во всех случаях. Компилятор выдает предупреждение о возврате локальной переменной и даже показывает ненормальное поведение на выходе.

Следовательно, вернуть массив из функции в C++ не так просто. Но мы можем добиться этого, следуя любому из нижеперечисленных методов.

Давайте приступим к делу.

1. Использование указателей

Как мы упоминали ранее, возврат обычного массива из функции с помощью указателей иногда дает нам неожиданные результаты. Но такого поведения и предупреждений можно избежать, объявив массив static .

Давайте посмотрим, как.

#include using namespace std; int* demo() //return type- address of integer array < static int a[5]; //array declared as static for(int i = 0; ireturn a; //address of a returned > int main() < int* ptr; //pointer to hold address int i; ptr = demo(); //address of a cout
Array is: 0 1 2 3 4 

Здесь мы объявили функцию demo() с типом возвращаемого значения int * (указатель) и в ее определении мы вернули a ( служит как именем массива, так и базовым адресом) на место вызова функции в main() .

Как видно из приведенного выше вывода, функция успешно возвращает массив.

2. Использование структуры в C++

Мы также можем заставить функцию возвращать массив, объявив ее внутри структуры в C++. Давайте посмотрим, как.

#include using namespace std; struct demo < //array declared inside structure int arr[100]; >; struct demo func(int n) //return type is struct demo < struct demo demo_mem; //demo structure member declared for(int i=0;ireturn demo_mem; //address of structure member returned > int main() < struct demo a; int n=5; //number of elements a=func(n); //address of arr coutreturn 0; > 
Array is: 0 1 2 3 4 

Здесь обратите внимание, что мы объявили массив arr внутри структуры demo . И на этот раз функция имеет возвращаемый тип самой структуры и возвращает demo_mem (переменная структуры) вместо массива.

Таким образом, используя другую структурную переменную a , мы можем получить доступ к массиву arr в функции main() .

3. Использование std::array

Для std::array в C++ возврат имени массива из функции фактически означает, что весь массив возвращается на место вызова функции.

#include #include using namespace std; std::array func() //function with return type std::array < std::arrayf_array; //array declared for(int i=0;i <5;i++) < //array initialisation f_array[i] = i; >return f_array; //array returned > int main() < std::arrayarr; //array with length 5 arr=func(); //function call cout return 0; > 
Array is: 0 1 2 3 4 

Следовательно, из вывода видно, что возврат массива функцией func() прошел успешно.

Заключение

Итак, в этом уроке мы узнали о различных методах, с помощью которых мы можем вернуть массив из функции C++.

Если у вас возникнут дополнительные вопросы, не стесняйтесь использовать комментарии ниже.

Рекомендации

  • С++ возвращает массив из функции — вопрос StackOverflow,
  • Двумерный массив в C++ — запись журнала для разработчиков.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *