Программирование на Си урок 27: Указатели в языке Си

  Рет қаралды 17,903

From the LAMER to the Programmer

From the LAMER to the Programmer

Күн бұрын

Пікірлер: 37
@Stan-fc8po
@Stan-fc8po 8 жыл бұрын
Дмитрий, я очень Вам благодарен за курс "Программирование на Си с нуля". С удовольствием пересмотрел все уроки, очень помогло при подготовке к сессии. Благослови Вас Господь! Ещё раз спасибо.
@FromtheLAMERtotheProgrammer
@FromtheLAMERtotheProgrammer 8 жыл бұрын
Рад был помочь! ) кстати курс еще не закончен )
@yevhenukrainianer4781
@yevhenukrainianer4781 6 жыл бұрын
Хороший практический пример (лучший из 3 что я увидел, пока искал, что мне надо), позвольте поправку: используете в циклах инкрементацию указателя вида: *p_mass_number++; *p_mass_char++; Приоритет операций справа налево: 1) сначала инкрементируется указатель 2) а потом берется значение по адресу после инкрементирования Разыменовывание Вам здесь не требуется, т.к. Вы всего лишь прошагиваете по указателю, тем более что разыменованный результат возвращается в никуда, т.к. никакая переменная результат не присваивает. Достаточно писать: p_mass_number++;
@СергейПресняков-о4р
@СергейПресняков-о4р 5 жыл бұрын
Спасибо. Я уже начал думать что указатели перестал понимать, что *p_mass_number++ просто инкрементирует значение первого элемента, т. е. рисует числа от 1 до 10 самостоятельно, а не берёт их из массива. Теперь стало понятнее.
@nadyamoscow2461
@nadyamoscow2461 4 жыл бұрын
Огромное спасибо за ваши уроки - самые понятные объяснения для новичка!
@ИльяЯгупов-н4я
@ИльяЯгупов-н4я 5 жыл бұрын
Спасибо большое за такой хороший урок! Всё последовательно и понятно!
@pequeno2288
@pequeno2288 7 жыл бұрын
Ваш адрес меняется потому, что меняется адрес памяти выделенной компьютером для работы программы, а он выделяет каждый раз новый ,а не перезаписывая (т.к. перезаписывает он в это же место память в других случаях)
@weekendshow7567
@weekendshow7567 2 жыл бұрын
отличный урок!!!
@StepanChuevYT
@StepanChuevYT 3 жыл бұрын
19:43 Хочу добавить что адрес увеличивается на sizeof типа указателя, т.е sizeof(int) == 4 соответственно каждый адрес будет увеличиваться на 4, а если бы мы вместо int был бы long long int sizeof(long long int) == 8 адрес будет увеличиваться на 8
@lutsiuk5
@lutsiuk5 8 жыл бұрын
всегда жду ваших видео уроков! спасибо
@FromtheLAMERtotheProgrammer
@FromtheLAMERtotheProgrammer 8 жыл бұрын
Рад что нравятся уроки )
@aleksandrchepaikin9570
@aleksandrchepaikin9570 5 жыл бұрын
в цикле лучше делать так *(p_mass_number + i). А то легко себе в ногу выстрелить если в большой программе проинкрементировать указатель который где то еще может использоваться. Советую после просмотра еще что нибудь почитать. Для полного понимания темы этого не достаточно. Спасибо автору за объяснение столь важной темы доступным языком)))
@777noob777saibot
@777noob777saibot 3 жыл бұрын
Почему адрес на первый элемент массива берётся без оператора & ? Должна быть причина. int* ptr = array;
@namename2031
@namename2031 3 жыл бұрын
26:15 *p_mass_char++; Здесь звёздочку писать не надо. Эта конструкция срабатывает в порядке приоритетов операторов. Сначала инкрементируется адрес указателя, а затем происходит разыменование.
@alexander199740
@alexander199740 7 жыл бұрын
Получается указатель служит для того, чтобы обращаться к какой то переменной и при этом он экономит место в оперативной памяти?
@Академияразработчиков
@Академияразработчиков 5 жыл бұрын
Место он не экономит, скорее наоборот. При передаче параметров в функцию можно выиграть передав указатель на что-то большое.
@majach2222
@majach2222 4 жыл бұрын
@@Академияразработчиков 'При передаче параметров в функцию' - аргуентов а не параметров! Параметры передаютца программе!
@Академияразработчиков
@Академияразработчиков 4 жыл бұрын
@@majach2222 согласен)
@androidjenyokcoder4739
@androidjenyokcoder4739 7 жыл бұрын
Если не ошибаюсь, каждый раз как Вы запускаете скомпилированную программу в терминале, создается процесс и операционная система резервирует для него память. Если нужен одинаковый адрес - Shared Memory (IPC - взаимодействие между процессами) А так в целом ничего... Спасибо за труд.
@FromtheLAMERtotheProgrammer
@FromtheLAMERtotheProgrammer 7 жыл бұрын
И вам спасибо за просмотр и комментарий.
@AlexxDo
@AlexxDo 7 жыл бұрын
еще можно добавить что можно было не отдельно инкрементировать указатель, а сделать такую запись: fprintf(stdout, "Index[%d], value[%d], points[%p] ", i, *p_mass_number++, p_mass_number); //просто я еще прату параллельно пытаюсь читать спасибо за уроки, Дмитрий.
@FromtheLAMERtotheProgrammer
@FromtheLAMERtotheProgrammer 7 жыл бұрын
Пожалуйста.
@yevhenukrainianer4781
@yevhenukrainianer4781 6 жыл бұрын
Alexx Do, здесь нельзя так инкрементировать, ибо обращение по указателю производится дважды, а в вызове ф-ии не гарантирован порядок обработки формальных параметров. Вы не можете быть уверены, инкрементируется после того, как в двух местах значение возьмется прдыдущее. Это плохая практика, и повезет, если компилятор под Вашу ОС сделает так, как вы захотели.
@yevhenukrainianer4781
@yevhenukrainianer4781 6 жыл бұрын
Подскажите, зачем компилятору указваете целевой файл.exe в GNU\Linux? Есть какая-то цель? Спасибо.
@Alex-dw3pn
@Alex-dw3pn 5 жыл бұрын
Я конечно понял что *p_muss_number++ это тоже самое что и p_muss_number=p_muss_number+1, а не *p_muss_number=*p_muss_number+1. Но почему так?.. Как это функционирует
@boristsaikin1
@boristsaikin1 3 жыл бұрын
Кто-то скажет, что вы недостаточно профессиональны! А я , как начинающий, скажу вам, что наоборот нравится, как вы ошибаетесь, а потом ищете ошибки и исправляете! Для начинающего это самое то, потому как именно на ошибках и учится программист!
@ghtrtjshs
@ghtrtjshs 3 жыл бұрын
4:41 ште
@shtas89
@shtas89 7 жыл бұрын
Дмитрий, а можете подробней объяснить роль указателей. Если я могу написать просто название переменной, то зачем мне декларировать указатель и использовать его. В каких случая их используют при написании реальных программ?
@FromtheLAMERtotheProgrammer
@FromtheLAMERtotheProgrammer 7 жыл бұрын
Указатель - переменная, содержащая адрес объекта. Указатель не несет информации о содержимом объекта, а содержит сведения о том, где размещен объект. Указатель может напрямую менять значение которое присвоено переменной на которую указывает указатель к примеру числа, строки. Посмотри видео 35 и увидишь в чем польза указателя на конкретном примере. Указатели часто используются в программировании на Си, но тема довольно таки не из легких ) особенно когда есть мудренные записи с указателями )
@incyberideas
@incyberideas 4 жыл бұрын
Указатель вы можете передать в другую функцию, она там с ним поработает прямо с данными в ячейке, и потом вернет вам указатель на эти данные назад. Разные подфункции не видят переменные друг друга. Автор не раскрыл этот и некоторые другие важные моменты указателя.
@ДанилТверской-ь8ф
@ДанилТверской-ь8ф 6 жыл бұрын
Хороший урок
@mihannic7929
@mihannic7929 7 жыл бұрын
Дмитрий ...я тоже хочу Вас по благодарить за уроки. Хотелось бы что бы Вы наглядно приводили примеры где это может использоватся ....тогда это будет еще большим стимулом для прохождения любого из Ваших курсов. Было бы на много интересней и доходчивей. Согласны?Спс за уроки.
@yevhenukrainianer4781
@yevhenukrainianer4781 6 жыл бұрын
Мне приходится это использовать в программировании Ардуино в проекте умного дома, т.к. на этой плате мало памяти в сравнении с ПК, и указатели в разрезе нужной структуры дают гибкие и экономные решения.
@ВикторСорокин-ч3м
@ВикторСорокин-ч3м 5 жыл бұрын
13:32 Зачем тогда делать отдельную переменную и приравнивать ее к массиву? Используй massiv да и все, как адрес массива ... к чему эти роги?
@incyberideas
@incyberideas 4 жыл бұрын
а как вы поступите если размер массива заранее не определён?
@jojomeme867
@jojomeme867 7 жыл бұрын
спасибо
@ЕвгенийБугрим-о3у
@ЕвгенийБугрим-о3у 5 жыл бұрын
На вывод строки тратится больше времени нежели на объяснение что такое указатель. Подготовиться надо было, а то сочиняешь на ходу.
Арыстанның айқасы, Тәуіржанның шайқасы!
25:51
QosLike / ҚосЛайк / Косылайық
Рет қаралды 700 М.
REAL or FAKE? #beatbox #tiktok
01:03
BeatboxJCOP
Рет қаралды 18 МЛН
人是不能做到吗?#火影忍者 #家人  #佐助
00:20
火影忍者一家
Рет қаралды 20 МЛН
Всё об указателях в C++ за 20 минут
20:00
Golang | Все Основы за 4 Часа Для Начинающих
3:59:49
Арыстанның айқасы, Тәуіржанның шайқасы!
25:51
QosLike / ҚосЛайк / Косылайық
Рет қаралды 700 М.