Как передать динамический массив в функцию?
Как передать динамический массив из функции генерации в функцию сортировки?
Пробовал через ссылки, после запроса на выбор алгоритма сортировки — ничего не происходит (Press any key to continue):
![]()
Ваша функция создания массива
возвращает из функции 0. Она нигде не возвращает указатель на созданный массив. Поэтому функция main м функция сортировки vuborom_sort не имеют доступа к массиву.
Более того вы не вызываете функцию сортировки. В данном фрагменте кода
не является вызовом функция, а является всего лишь локальным объявлением функции.
И я думаю, что в этом предложении
вы имели в виду 1 вместо 0.
Программа может выглядеть следующим образом:
Ее вывод на консоль может быть следующим:
И лучше писать латинскими буквами английские фразы, а не русские. В противном случае это затрудняет чтение программы.
AncellX / 2017-03-27 Two-dimensional arrays.md
Для объявления двумерного динамического массива нужен указатель на указатель. Двумерный динамический массив объявляется следующим образом:
1 — выделяется память под массив указателей и в адрес выделенной памяти записывается указатель на указатель.
2 — в цикле for обращаемся к каждому элементу массива указателей и записываем в него адрес одномерного динамического массива также выделяемого оператором new .
Обращение к элементам двумерного динамического массива
Обращаться к элементам двумерного динамического массива можно точно так же, как и к элементам двумерного статического массива (через оператор индексирования), или через арифметику указателей и оператор разыменования.
После того, как двумерный динамический массив уже не нужен его нужно удалить, а память, которую он занимал вернуть ОС. Удаление динамического массива производится в обратном порядке от выделения под него памяти, то есть сначала удаляются одномерные динамические массивы, адреса которых хранятся в массиве указателей, а затем удаляется массив указателей.
Передача двумерного динамического массива в функцию
Двумерный динамический массив передают в функцию как указатель на указатель. Также нужно передать количество строк и столбцов(количество элементов в строке) в массиве.
Как правильно передавать указатель или ссылку на динамический массив в функцию?
Добрый день! пытаюсь разобраться что лучше и как передавать ?
например у меня есть вот такой код : — в нем я передаю массив одномерный по ссылке ?
как правильно передать его по указателю ? я столкнулся при передачи по указателю что не понимаю где и что нужно разыменовывать например в этом кусочке кода !
следующий вопрос как передать тогда двумерный массив по ссылке и по указателю и как к ним обращаться ?
- Вопрос задан более трёх лет назад
- 4087 просмотров
- Вконтакте
- Вконтакте
так вот например я передаю
int *mass = new int [n]; — указатель на массив указателей
передача в функцию не по ссылке ?
int** array2D = new int*[SIZE] — вот это что значит int*[SIZE] — еще разыменование ?
мне не понятно где то пишут что когда передаешь указатель в функцию ты ты должен отдать ссылку на объект
Как стать программистом
Это моя личная ссылка-приглашение на Stepik для вас. Регистрируясь по этой ссылке, записываясь на курсы и решая задачи, Вы помогаете автору данного сайта принять участие в конкурсе платформы Stepik! Подробности конкурса здесь: https://vk.cc/75rKuS
воскресенье, 6 октября 2013 г.
Занятие 18. Передача одномерных массивов в функцию. Возвращение массива из функции.
Добрый вечер друзья. Продолжаем изучать работу с массивами и указателями.
Сегодня научимся передавать массив в функцию и возвращать массив из функции.
Прочитайте улучшенную версию этого урока «Передача аргументов в функцию».
- Ещё более доступное объяснение
- Дополнительные материалы
- 12 задач на программирование с автоматической проверкой решения
Итак, начнем с первого пункта. Пусть нам необходимо передать массив в функцию и там его обработать. Ну допустим вывести его элементы на экран. Тут возможны два варианта.
1. У нас статический массив.
2. У нас динамический массив.
В зависимости от этого и нужно плясать.
Первый случай. Передача в функцию статического массива.
Для определенности будем передавать массив символов. Напишем функцию, которая принимает строку и выводит её на экран.
Давайте внимательно рассмотрим аргументы, которая эта функция принимает. Первый из них как раз и есть массив, который мы хотим передать. Как видите отличие от передачи обычной переменной лишь в том, что мы после имени пишем квадратные скобки. Именно они и указывают на то, что это не просто некая переменная а целый массив переменных данного типа.
В скобках, не нужно указывать размерность массива. С размерностью массива вообще все не так просто. Функции в Си не умеют самостоятельно определять размерность переданного им массива. Поэтому отдельным параметром нам необходимо передавать его размер. В нашей функции мы передаем размер массива с помощью переменной n.
Напишем самую простую программу, которая будет использовать эту функцию.
Обратите внимание, что передача массива в функцию в этом случае, по виду, ничем не отличается от передачи обычной переменной. Мы лишь указываем его имя и все. Это только на первый взгляд так кажется. Но об этом чуть позже.
Второй случай. Передача в функцию динамического массива.
Давайте решим такую задачу. имеется текстовый файл input.txt. Пусть в нем в первой строчке записано натуральное число N не превосходящее 100. А в следующих N строках записаны некоторые вещественные числа. Пусть мы хотим посчитать среднее арифметическое всех этих чисел и вывести.
Удобно для хранения чисел завести динамический массив. Хотя, на самом деле, в этой задаче мы могли бы просто читать числа из файла и сразу вычислять их среднее значение. Но как-то я не могу придумать пока более подходящего примера.
И так напишем требуемую программу.
Обратите внимание на аргументы функции. Как видите, если мы передаем динамический массив, то нам нужно явно указывать на то, что функция принимает указатель на первый элемент массива. В случае одномерного массива это не критично, и вы можете объявить аргументы как и в прошлый раз, т.е.
void sa_arr(float a[], int n)
но так делать не стоит. Приучайтесь сразу передавать динамические массивы таким образом.
Теперь вернемся к нашим отличиям а так же второму вопросу.
Если вы помните, то переменные в языке Си, при передаче их в функцию передаются по значению. То есть мы передаем не сами переменные, а только их значения. И если мы в функции будем их изменять, то настоящих переменных это никак не коснется. В нашей группе в вк, даже было небольшое задание на эту тему. Да и в уроке с указателями мы разбирали, как обойти это ограничение.
Основное отличие передачи массива в функцию в том, что массивы, в отличие от переменных всегда передаются по ссылке. Т.е. в функцию передается не копия массива, а сам массив. И если внутри функции мы будем как-то изменять массив, то эти изменения останутся и после того, как функция закончит свою работу.
Несколько изменим наше предыдущую программу. Изменим один из элементов внутри функции. И посмотрим, что будет с исходным массивом.