Передача массива в функцию. Как передать массив в функцию. C++ для начинающих. Урок #35.
HTML-код
- Опубликовано: 28 июн 2017
- Понравилось видео или оказалось полезным? Подпишись!
Передача массива в функцию. Как передать массив в функцию. C++ для начинающих. Урок #35.
Если вам нравятся мои уроки, вы хотите поддержать меня и развитие канала, то можете сделать это тут! =)
www.donationalerts.ru/r/simple...
или тут
/ simplecode
Уроки по программированию
Наша группа ВК smplcode
Подписывайтесь на канал / @simplecodeit
Спасибо за урок! Сергей хотелось бы попросить Вас к каждому уроку (или как посчитаете нужным) давать 2-3 домашних задания, можно без видео, просто в описании. Так будет больше практики. P.S Очень радует частота выхода уроков!
Огромное спасибо! Если б не ваши уроки - давно бы зашел в тупик по обучению!!!
Пожалуйста!
1:00 - Объявляем массив
1:45 - Функция заполнить массив
3:22 - Передача массива с помощью указателя
4:00 - Что произойдет при обращении к элементам массива переданными по указателю?
5:20 - Вывод заполненного массива
6:10 - Вызов функции вывода массива
6:55 - Вызов функции заполнения массива
8:50 - Что произойдет при передаче массива по указателю?
9:45 - Что произойдет после заполнения массива?
11:00 - Выполнение функций в отладчике
* Самые понятные, видео уроки по c++, на всём (RU) youtube *
Ставлю с лёту лайк, так доходчиво, это высший пилотаж, главное погрузиться на одну с вами волну, спасибо за урок!
Мне нравится фишка с аналогиями, реально легче воспринимать информацию)
Спасибо за контент!
Хочу сказать огромнейшее спасибо за Ваши видео!!!!!! Наконец-то смогла понять эту тему, супер доступное объяснение!))))))))
Спасибо, очень понятные виде. Нигде не встречал таких простых и понятных уроков. Продолжай в том же духе)
мой сельский мозг сейчас взорвется. Но все-равно спасибо! Когда-то я выберусь из этого дерьма!
Чувак, не дрейф! Человек очень доступно выложил материал! Если что не ясно прочти одну - вторую книжку. Страуструпа рекомендую.
самый простой способ делать одно и тоже пока не станет понятно, "записать на подкорку" так сказать
@@Alex-hs8xj УДАЧИ!
Привет ну как идет изучение С++?
И как? Выбрался?
Сергей! Ты СУПЕР! Мои аплодисменты!
Блестящий Урок! Всё по полочкам!
Хорошие уроки. Чуток затянуты но на скорости 1.75 входят отлично ! Спасибо!
Скорость 2х норм заходит))
@@Evgeny.. заходит в два раза больше информации 8)
@Stalker from Pripyat по большой части зависит от человека )
@@Anton-mp6lc Hi Антон
@@Imgui_seller hi past
Просто от душевное спасибо, раз 10 посмотрел разные видео, смог решить то, что не получалось, пошёл дальше обучаться, аж интерес к программированию возрос ещё.
Что именно решил?
благодаря вашим урокам я выучил плюсы так, чтобы сдавать экзамен и писать курсачи. А сейчас вспоминаю заново, но снова с вами. Спасибо!
Какие же классные у Вас уроки.
Блин чувак, это классно, я еще не все уроки посмотрел, но ты делаешь уроки не просто в стиле "Hello World", а еще и разжевываешь как это работает, что работает и не работает в конкретных случаях, это здорово, я сам начинал на Delphi, на си некоторое не понимаю как делать, кажется геморно, но тут все понятно, СПАСИБО...
Благодарю за прекрасный курс 😊
Спасибо огромное за труды)!
Как всегда спасибо за отличный урок!
Спасибо за урок!
Спасибо за Ваш труд.
Тяжело понять, вроде пон, а вроде и нет
Пересматриваю по пару раз чтобы дошло. Спасибо за уроки, вы просто мой спаситель
спасибо за урок, очень помог!
Все очень круто и понятно. Спасибо, но хотелось бы ДЗ, побольше! Для закрепления материала!
за день до экзамена самое то,спасибо!
Всё понятно и задан вектор на изучение указателей :)
Спасибо за знания!
Интересный факт, в void FillArray массив будет весить 4 байта на 32 разрядной и 8 байт на 64 разрядной, так как является указателем, что равнозначно (int *). Обычный (int) будет почти всегда весить 4 байта. Поэтому ничего страшного если у вас массив весит 8 байт. Просто придется делать немного другие вычисления, если вдруг.
Я использовал sizeof и сидел полчаса думал, почему у меня не работает вывод массива. Спасибо тебе большое
Спасибо Сергей. Очень не хватает Домашних заданий.
Спасибо все очень понятно!
Это все хорошо.Тяжеловато для понимания.Побольше бы конкретных примеров-зачем эти функци-не только cout.
Огромное спасибо очень сильно помогло!
спасибо за урок!
Спасибо огромное!!!
Еще раз здравствуйте, Сергей! Огромное спасибо вам за такие полезные уроки, видно, что рассказываете максимально информативно и понятно. Очень рад, что нашёл ваш канал! С одной стороны нужно как можно сильнее распространять ваши видео, но с другой стороны, из-за этого будет создаваться конкуренция в мире программирования xD, ведь контент у вас ну уж очень годный. На С++ некоторые вещи уже относительно знаю, кроме: классов, полиморфизма, наследования и т.д, хотя понятно, что это еще далеко-далеко не весь С++. И теперь понятно у кого буду обучаться по данным темам :). И не планируете ли вы в будущем снять создание какого-нибудь приложения, игры на С++ только не консольного, а в окне?
Спасибо, лучший!)
броу, после видоса ощущаю только уважение
кстати, arr[n] - это синтаксический сахар для *(arr+n), где arr - адрес первого элемента массива, а n - это количество байт памяти, выделяемое для типа данных массива, умноженное на то число n, которое является индексом нужной ячейки массива
Спасибо!
Спасибо
благодарю
Имя аргумента функции не обязательно должно совпадать с именем параметра в ее описании. А лучше даже наоборот делать их разными и относиться к параметрам, как к обычным заглушкам. И про последнее, имя массива - указатель на его первый элемент (он указывает на элемент arr[0], т.е. на первую ячейку в которой находится целочисленное значение весом 4 байта)
очень ценное дополнение
у меня оно весит 8 байта
+ кому реально интересно, посмотрите лекции Тимофея Хирьянова по алгоритмам и структурам данных на с++, там это вполне хорошо объясняется
Какой же ты крутой
Очень понятные пояснения!
Сам сижу (ставлю на паузу) и думаю почему так происходит!
И вроде мыслю правильно!
По идеи в случае с функцией рандома чисел надо было бы вернуть значение (будь это переменная и подобное), но в случае массивов оно автоматически указывает на них при работе функции (работая с той функцией которую мы указали)
Но будь это переменная её значение пришлось бы возвращать чтобы сохранить и после присваивать переменой эту результат работы функции ибо в случае с переменной оно просто копирует значение из-за чего приходиться писать чуть больше кода с возвратом.
А в массиве оно сразу берет "адрес" массива если можно так сказать и проводит операции в нем...
В параметрах как я понял задается тип данных с которым мы будем работать (будь то массив/переменая и тд) и внутри функции мы указываем что будет происходить с этими индефикаторами.
Когда мы активируем функцию оно смотри типа:синтаксис параметра утчен, и можно работать с данными строками ибо они подходят для работы с ними...
Блинннн описать это сложно, но это чуть легче чем кажется... Суть я вроде уловил кншн... Хех
С моей граматикой второклассника блэээт
Ааааа жесть
Я удивлен, какие люди все таки ставят дизлайки под интересными, качественными и понятными видео
Соотношение лайков/дизлайков всё же гораздо выше в сторону лайков, чем в видео многих других ютуберов, так что человечность ещё не потеряна.
Завистливые преподаватели, которые не могут так доходчиво давать материал!
С++ для меня уже как Скайрим. Как же это уже ненавижу и как безумно мне это нравится снова и снова))
#функции #SimpleCode #урокипрограммирования
Как настроить компилятор в Визуал студио 2017, у меня F10, F11 работает без учёта циклов,- сразу переменной присваивает конечный результат?
@@user-qz9yi5hj3s f7
спасибо
Видео записано в мой день рождения
10:41 Бибипка!
поправьте, если ошибаюсь, но мне кажется, sizeof, в силу того, что при передачи массива в качестве аргумента, функция берет ссылку на первый элемент, выдает именно то, что выдает, а именно 4 байта, то есть размера int
Сергей, спасибо за уроки!
Такой вопрос. Можно ли из функции вызвать другую функцию? И как это реализовывать, если возможно?
Да, вполне спокойно можно вызывать функции внутри другой функции. Можно даже эту же самую функцию вызывать внутри себя (это называется рекурсия). Реализовывается так же, как и вызов функции в main, для компилятора это такая же функция, как и любая другая функция
В более ранних уроках это было, например srand (time (NULL));
огромное спосибо вас за уроки . Вот у меня есть вопрос а как передовать переменную типа string другой функции пробую как на видео пишет run time error
Как настроить компилятор в Визуал студио 2017, у меня F10, F11 работает без учёта циклов,- сразу переменной присваивает конечный результат? Спасибо.
Спасибо за грамотное объяснение материала! Однако мне не удается передать двумерный массив в функцию. Подскажите пожалуйста как это сделать))
Я сейчас столкнулся с этой проблемой
Ты разобрался?
@@Redmigarichuchichello Такая же проблема
@@egogrigs2563 я разобрался, могу на сололерн ссыль дать
@@Redmigarichuchichello и как это сделать?
Не все компиляторы передают в функцию указатель на массив, если массив статичный. Ведь есть же возможность (или нет?) указать размер передаваемого массива в функцию.
Спасибо за уроки! Сергей, объясните пжл, вы передаете массив в функцию изменив имя массива, откуда функция знает, что это именно этот массив? (чего то я не уловил момента)
Не совсем, смотри, в функции main()
Мы передаём на место arr[] наш massiv когда вызываем эту функцию.
То есть: PrintArray(massiv, SIZE)
Попробуйте такое : на рабочий стол виндовс поместите ярлык какой либо программы, далее переименуйте его, после кликнете по переименованному ярлыку, ииии... всё равно будет вызвана только эта программа .
Будут ли уроки по WinAPI?
Сергей, пожалуйста запишите видео на тему передачи матрицы в функцию, ибо я ничего не могу понять
Bartholomew Defender все так же как и в уроке только появится еще один параметр отвечающий за количество столбцов матрицы
Сергей простите процитирую Вас: "....передать массив в функцию.Зачем нам это может понадобиться?Ну, к примеру для того , чтобы написать функцию которая будет выводить содержимое массива. " Что-то не очень пример для объяснения "для чего?". Вот в самом конце урока35 массив занимал в памяти 40б, а в функции 4б(по известной причине).Т.е. можно сказать, что это причина почему может понадобиться передача массива в функцию? Хотелось бы на каких-то конкретных примерах, как может пригодиться тот или иной урок.Спасибо за уроки.
как записывается двумерный массив в функцию, название и дальше в круглых скобках указывается количество строк и колонок через запятую?
Подскажите пожалуйста а как вставить в функцию одномерный динамический массив? Есть разница в коде?
Можно ли передать векторный массив в функцию так, чтобы изменения в функции отображались и на массиве и как?
для питонистов, функция вывода массива как в питоне
void print_array(int arr[], const int size)
{
cout
Здравствуйте. Я пытался поэкспериментировать с функциями и типом данных char, я видел на одном из сайтов как с помощью двух или трёх функции можно объявить переменные в одной функции дать содержимое в другой и вывести на экран, я написал функцию marko и использовать тип char по синволам marko и вывести через функцию mail но не вышло, я гуглин чтоб выяснить почему не сработала но нечего не нашел. Подскажите что делать.
Музыка на заднем фоне просто легенда
Текст программы:
#include "iostream"
using namespace std;
void main()
{
setlocale(0, "");
int line;
int column;
cout column;
////////////////////////////////
/*Выделение памяти под двумерный масив*/
int** mass = new int* [line];
for (int i = 0; i < line; i++)
{
mass[i] = new int[column];
}
////////////////////////////////
////////////////////////////////
/*Рандомное заполнение масива*/
for (int i = 0; i < line; i++)
{
for (int j = 0; j < column; j++)
{
mass[i][j] = rand()%20;
}
}
////////////////////////////////
////////////////////////////////
/*Вывод масива в консоль*/
for (int i = 0; i < line; i++)
{
for (int j = 0; j < column; j++)
{
cout
Добрый день, решил организовать ваше решение с двумерным массивом, возникли трудности, как я могу сбросить вам пример кода, чтобы вы объяснили. Заранее благодарен
Автор забросил канал, если есть какие то проблемы с кодом и ошибки всегда есть chat gpt.
Дошло, для чего был нужен такой долгий и нудный предыдущий урок! Спасибо!
Мне пришлось const int SIZE = 10; вынести из main ещё и в заголовок. Т.о. у меня их теперь две. Иначе из main константа была не видна функциям определённым в заголовке.
А теперь main видит только свою SIZE, а глобальную верхнюю видят только функции.
А почему у вас она видна всем? Ведь она не глобальная, если объявлена только в main ?
Респект из Армении Сергеи
а какая музыка играет под видео?))
Т.е с помощью такой функции я могу только конкретный массив заполнять/выводить, а можно как-то задать функцию, которая сможет массивы с разными именами выводить, ведь это чаще требуется?
так в параметр функции ты передаешь именно массив и не сказано какой, т.е. ты можешь передавать в функцию столько массивов и со столькими именами, сколько тебе нужно
здравствуйте можете пожалуйста снять видео на тему keybd_event
Сергей, объясните пожалуйста, зачем вы создаете 2 цикла for, если в первый цикл можно поместить cout после определения значения ячейки?
Стоит ли мне привыкнуть делать именно 2 цикла?
В данном случае 2 цикла использованы для логического отделения процесса заполнения массива от вывода информации. Можно и в одном сделать. НО городить разный по назначению функционал в одном месте - очень плохая практика, привыкайте к тому, что каждый вид функционала должен быть отдельно, впрочем, вы это поймёте когда изучите функции.
#SimpleCode Хорошо, спасибо большое
👍👍👍
Передаётся указатель на первый элемент массива arr = *arr[0]. Поэтому sizeof в функции возвращает 4 - это первый элемент, а не 40
можно проверить, создав массив типа double.
тогда в мэйне весь массив будет весить 80 байт
а в функции так и останется 4 байта, хотя должен был быть 8.
А с 2-мерным массивом как?
1 а нельзя внутри функции разыменовать массив и по нему уже sizeof взять?
2 если массив по ссылке передавать, то тогда наверно будет работать?
Спасибо за урок, но у меня остался непонятым вопрос: почему в функции FillArray и PrintArray в аргументах стоит size с маленькой буквы и это работает? Ведь с++ чувствителен к регистру.
Посмотри/Пересмотри "Передача параметров в функцию по значению. Параметры функции. Передача аргументов в функцию. #34"
Привет, разобрался с этим? (просто я тоже немного не понимаю)
👍
Такой вопрос. Когда мы работаем с переменными, то по умолчанию функция работает со значениями, а не с адресами. (Т.е чтобы работать с адресами там в параметрах функциях вводится указатель, а при объявлении в скобах пишется амперсант, ну вы поняли).
А когда мы работает с массивами, то он работает сразу с адресом. Это типо фича?
Доброго времени суток,подскажите пожалуйста,а сам синтаксис двухмерного массива в функции будет выглядеть так? void FillArray(int arr[ ],const int size,const int coll) или void FillArray(int arr[ ] [ ] ,const int size,const int coll)?
Он слукавил, сказав что двумерный в функции обьявляется так же, как двухмерный. Пишут что только левая мерность допускается без параметра, а остальные должны быть явно заданы.
arr [ ][ ] - не правильно.
arr [ ][100] - правильно
arr [ ][COL] - правильно при условии что col будет задан ДО обьявления функции.
привет из 2023. Спасибо большое!
где же ты видео записываешь? во многих видосах я заметил, что бибикают машины xD
Такая проблема, я переписываю ваш код для обучения. Но в visual studio пишет, что невозможно использовать тип данных int, в функции типа void. Из-за чего может появляться эта ошибка? И как возможно её устранить?
Есть код - приведен ниже. Ввод массива осуществляется функцией fillArr. Как сделать так чтобы при выводе массива функцией printArr выводилось кроме элементов массива еще и имя массива который создаем.???
Имеется ввиду не один массив а несколько разных массивов в одной программе????
#include
#include
using namespace std;
//Функция. Создание и вывод одномерного массива с помощью функции
void fillArr(int arr[], const int size)
{
for (int i = 0; i < size; i++)
{
arr[i] = rand() % 20;
}
}
void printArr(int arr[],int size)
{
for (int i = 0; i < size; i++)
{
cout
не подскажите как сделать такие же подсказки при наводе на переменную
Мне данный код выдает ошибку. must return a value. Почему у вас не вспринимает как ошибку без return?
В объявлении параметров функции в качестве размера массива стоит константа. Поясните пожалуйста почему не просто переменная, и как она работает? Если я правильно понял то параметр передается в эту константу и её в течении работы функции нельзя будет поменять. Т.е. в данном случае если мы ставим просто переменную вместо константы, то собственно ничего не изменится, поскольку мы эту переменную и не меняем больше внутри функции. Обязательно ли тогда объявлять параметр как константу?
Константа нужна чтоб при написании кода не сменить его значение по ошибке.А константа выдаст ошибку.И код быстро исправите
Передача двумірного масива в функцію:
#include
using namespace std;
const int ROW = 6;
const int COL = 7;
void FillArray (int arr[ROW][COL], const int row, const int col)
{
for (int i = 0; i
тогда в мейне их убери
@@wh1ter3bel36 згоден, спочатку запостив код, а потім прибрав те з мейн, але вже не став тут коректити)
Дякую. Я вже де тільки не шукав.
Передача двумерного статического массива все равно делается через одномерность и с использованием указателей, то что вы написали это грубый костыль
Обратил внимание, что в параметрах функции константное значение написано не заглавными буквами. Это корректно, если да объясните почему. Заранее благодарю!
Александр Ткачев , это корректно с технической стороны даже если создать глобальные константы прописными буквами. Просто хорошим тоном считается, константы и дефайны именовать именно заглавными буквами.
Он в локальную переменную функции size передал значение константы SIZE, если технически описывать
Вот такое же решение с двумерным массивом (если кому-то нужно)
#include
#include
using namespace std;
const int size=10;
const int row=10;
void fillarray(int arr[size][row],const int size,const int row)
{
for(int i=0;i
ты же в курсе, что тогда смысл использования функции теряется? ты не сможешь размер массива поменять, потому что задал глобальные константы. Сможешь делать только одинаковые по размеру массивы
@@yuziazumi3563 а как можно правильно писать?
@@metalhead-mh1864 вот это ты конечно ответил классно, год прошёл)
Я уже и не помню того, что писал, но всё перечитал. Сейчас я поступаю в вуз и немного преисполнился в кодинге, могу сказать, что человек сверху написал очень непрактичные функции. Во-первых в вызове функции в качестве аргументов он указывает массив, размеры которого регулируют ранее объявленные константы, а также те же самые константы, которые УЖЕ вписал в размеры массива. Странный ход, который тут не нужен. Во-вторых на практике его код не подойдёт ни под какие ситуации, т.к. конечному пользователю его кода скорее всего нужно будет заполнять массивы разных размеров, а в его коде заполнять можно только заранее подготовленные размеры массива. Было бы правильно указать в аргументе функции указатель на динамический массив, чтобы конечный пользователь смог заполнять любые массивы.
@@metalhead-mh1864 так он ещё и два раза объявил одни и те же константы. Сначала глобально, потом в главной функции.
@@yuziazumi3563 я вот сейчас сделал так же как и он, но не объявил два раза значение глобальных отправил в main. Короче говоря в самом начале объявил const int ROW ,const int COL, a в main написал const int row = ROW, const int col = COL. Пока могу только так 😂
как я понимаю, вызывая функцию, ты подставляешь другие переменные, не те, которые в вызванной функции
Не знаю, может был уже такой вопрос,но
Что делать, если у нас 2 разных массива? Один из них придется заполнять в ручную, или писать 2 функции, или еще что то?
Я так понял, в функцию передается "ярлык" массива, и количество элементов в нем, поэтому, не важно, какой массив ты собрался заполнять, важно только количество элементов в нем, оно должно быть равно вот этому самому постоянному числу, а если тебе нужно будет несколько массивов через одну функцию инициализировать, при этом длины массивов разные, то без динамических массивов думаю, не обойдешься. Надеюсь,помог
Все это хорошо конечно, вот только как двумерный массив передать?
@Алексей Румянцев аргумент arr[ ][ ], не воспринимается. Причем он где то говорил, что кол-во колонок должно быть фиксировано. Если писать arr[R ][C] , то после using namespace std; нужно задавать эти константы (до функции). Тогда все работает. Правильно ли так или нет ХЗ, как по другому не знаю.
@@user-gc5td9zq3b , сам интересовался этим вопросом.
Нашел на одном форуме объяснение: Чтобы передать двумерный массив в функцию, нужно первые квадратные скобки оставить пустыми, а во вторые записать число. Таким образом компилятор понимает размер каждого дополнительного массива.
Пример: void FillArray(int arr[][5])
Подскажите, каким сочетанием клавиш можно так быстро цикл for заполнить?
Tab
@@klever4707 спасибо
Блин, раньше изучал Пайтон, и ему там вообще по-барабану что за переменные и как их возвращать. Тут же...
Производительность vs Простота.
4:30 Это будет как 2 массива, которые в любом случае будут идентичными???
Это один и тот же массив(я так понял) т.к. в функцию вы передаём указатель на массив в функции мейн и они идентичны , а не созданная копия этого массива
Может кто подсказать, установил Visual Studio 2017 по примеру автора канала, при первом запуске проэкта пишет "возникли ошибки зборки", уже все перепробывал в инете ответов нет( хеееелп
Аналогичная проблема
качай Visual Studio для Desktop у меня все норм
@@ayras7932
качай Visual Studio для Desktop у меня все норм
почему то когда я написал функцию для заполнения двумерного массива и функцию вывода у меня код не компилировался , стоило мне записать объявление размеров роус и колс до функций то код заработал . я так и не понял почему . отладчиком пользоваться не знаю как ибо нас просят кодить на вс коде.