Арифметика указателей. Указатели и массивы. Массив это указатель. C++ для начинающих. Урок #47

Поделиться
HTML-код
  • Опубликовано: 16 июл 2017
  • Понравилось видео или оказалось полезным? Подпишись!
    Арифметика указателей. Указатели и массивы. Массив это указатель. C++ для начинающих. Урок #47
    Уроки по программированию
    Наша группа ВК smplcode
    Подписывайтесь на канал / @simplecodeit

Комментарии • 279

  • @Salavat1k
    @Salavat1k 5 лет назад +811

    Арифметика указателей приводит к следующему:
    a[i]= *(a+i) = *(i+a) = i[a]
    Т.е. в записи кода можно менять местами имя массива и значения индекса элемента в квадратных скобках. Т.е. записи a[3] и 3[a] равноценны. поясню на примере, например есть массив int a[] = { 1,3,5,7,9,11 };
    тогда a[3]=7 . Если записать в коде 3[a] то тоже получим 7
    Это приводит к парадоксальным записям кода, которые программисты не используют, но на собеседованиях их могут попросить пояснить. Например, задачка:
    что выведется на экран из такого :
    int a[] = { 4,3,5,7,9,11 };
    int a2 = 3[a+1]-a[5]+(a-1)[4];
    cout

    • @pubgr862
      @pubgr862 5 лет назад +78

      Sasa ааааааааааааа!!!!!!!!!!!!!! Но я понял. Но ААаАааАаАаАа!!!!!!!!!!!! Я проверил твой пример, потом по аналогии шлепнул свой. Сначала это взорвало мне мозг а пото взорвало ещё раз. Спасибо это круто!

    • @UnifiedGod
      @UnifiedGod 5 лет назад +21

      Крышу сносит

    • @MaxOdious
      @MaxOdious 5 лет назад +22

      Это просто... мне понравилось, пример такой же классный, как автор этого ролика

    • @user-zg9du7nu9q
      @user-zg9du7nu9q 4 года назад +4

      я так понимаю это танется из расчета адресов в ассемблере по начальному адресу и индексам сдвига.

    • @yiddo
      @yiddo 4 года назад +9

      @Negative 3 -- это порядковый номер числа в массиве, а -- это нулевой элемент массива т.е. цифра 4, а+1 -- это сдвиг начальной (нулевой) позиции массива на один вперед (+1) т.е. в этом случае нулевым элементом станет тройка, первым - 5, вторым - 7, а ТРЕТЬИМ - 9.

  • @user-kw4uk7dm3z
    @user-kw4uk7dm3z 6 лет назад +117

    Вроде все ясно, но такое чувство что я что-то упускаю)
    Все равно спасибо большое за урок!

  • @p1c4ss0
    @p1c4ss0 4 года назад +73

    я долго, думал, не писать комментарий. Но тут трудно не заметить. Уровень БОГ. Четко и ясно. Вопросов вообще не остается. БОООЖЕЕЕСТВЕЕЕННОО. Реально, материал(урок) - БОМБА. Мощно. Нет слов, в хорошем смысле. Реально, я хоть и атеист, но я ,наверное, начну на Вас молиться =)))) Реально классные уроки, аплодирую стоя. Браво =)

    • @petroalex5816
      @petroalex5816 3 года назад

      Неверующий:)?

    • @p1c4ss0
      @p1c4ss0 3 года назад

      @@petroalex5816 так и есть:))

    • @faust8th316
      @faust8th316 Год назад +2

      как сейчас дела ?

    • @kyryllsemendiaiev
      @kyryllsemendiaiev Год назад +3

      Только решил уверовать и тут же ошибка
      Не создавать себе идолов и кумиров)))
      😁😁😁

    • @user-od1sy9uo2v
      @user-od1sy9uo2v 7 месяцев назад +1

      Если у тебя вопросов не остается, то это очень плохо, значит ты плохо понял тему, так как там много нюансов.

  • @user-ho7db5oz8d
    @user-ho7db5oz8d 3 года назад +30

    ох как же не просто это усвоить и применить то сразу ((
    спасибо за уроки огромное

  • @user-sm3nf3dt9f
    @user-sm3nf3dt9f 3 года назад +20

    Классный урок. и весь плейлист, спасибо автору. Жалею что не просмотрел его три года назад.

  • @user-ko8uz4ye3y
    @user-ko8uz4ye3y 3 года назад +23

    0:35 - Создаем, заполянем и выводим массив
    1:27 - Создаем указатель и присваиваем ссылку на массив *pArr = arr;
    1:57 - Вывод массива arr циклом for с помощью указателя *pArr; // cout

  • @archiechellaut9483
    @archiechellaut9483 2 года назад +2

    Большое спасибо за видео, Сергей! Доступно, внятно и доходчиво!

  • @aleksandrrodan5196
    @aleksandrrodan5196 Год назад +1

    Как же хорошо и понятно вы все объясняете ! Благодарю

  • @lehasamarsky2002
    @lehasamarsky2002 Год назад +2

    Лучшие и самые доступные видеоуроки по С++, спасибо огромное!

  • @karenyaylyan2243
    @karenyaylyan2243 3 года назад +4

    Долго искал информацию по указателям и всё равно не очень понял эту тему, но Вы всё объяснили максимально просто и понятно, спасибо огромное за Ваши труды!

  • @MaksymSmerechevskyi
    @MaksymSmerechevskyi 3 месяца назад +1

    хороший монтаж , классные вставки , биг респект и лайк

  • @AnnTimLeo
    @AnnTimLeo 5 лет назад +2

    Уроки прекрасные! Спасибо))))

  • @user-kz8pw3qf6i
    @user-kz8pw3qf6i 5 лет назад +18

    Как буд-то к ассемблеру ведете) А так спасибо!

  • @minsk150
    @minsk150 3 года назад +1

    Очень понравилось изложение! Большое спасибо!

  • @whhhhitee
    @whhhhitee 4 года назад +2

    Вы лучший. Спасибо!

  • @mr.warpunch6007
    @mr.warpunch6007 2 года назад +3

    Отличный ролик, а также взорвал мозг комментарий пользователя Sasa, его пример это реально снос башки!

  • @likercol806
    @likercol806 9 месяцев назад +1

    Мне очень понравился этот урок, интересно было поэкспериментировать с памятью, массивами, указателями и так далее

  • @molik52
    @molik52 5 лет назад +4

    спасибо за уроки) учусь в академии там те же темы проходим, когда что то не понятно смотрю все понятно становится))

  • @sankarshanarama6753
    @sankarshanarama6753 2 года назад

    Спасибо за этот доходчивый урок

  • @neverhoodJK
    @neverhoodJK 6 лет назад +1

    Интересно, спасибо!

  • @user-ok5bp6uz1e
    @user-ok5bp6uz1e 3 года назад +5

    Спасибо вам за ваши видео. Хочу чтобы ваш канал полетел вверх по просмотрам и лайкам, лично я бы поставил бы тонну( к сожалению не имею такой возможности). В общем желаю вам удачи и еще раз очень благодарен вам, счастья и здоровья!

  • @user-ob4wn9ty7c
    @user-ob4wn9ty7c 6 лет назад +9

    спасибо большое!!!

  • @Ermine882
    @Ermine882 6 лет назад +11

    Спасибо.

  • @daddyzmei234
    @daddyzmei234 3 года назад +4

    Вот почему массивы начинаются с нуля. Спасибо!

  • @sviatoslavfedorov1604
    @sviatoslavfedorov1604 2 года назад

    Спасибо, в 2 словах объяснили всю лекцию

  • @user-rd1hb8uf9b
    @user-rd1hb8uf9b 6 лет назад +32

    * Самые понятные, видео уроки по c++, на всём (RU) youtube *

  • @user-wo1dx1rz4z
    @user-wo1dx1rz4z 5 лет назад +5

    Спасибо!

  • @egorkalmykov4003
    @egorkalmykov4003 3 года назад

    Спасибо за урок !!!

  • @spaceshuttle5066
    @spaceshuttle5066 3 года назад

    Супер. Всё было понятно.

  • @zikkurat158
    @zikkurat158 5 лет назад +1

    сердечно благодарю, товарищ)

    • @bb-sc1oc
      @bb-sc1oc 3 года назад

      крутая ава

  • @user-tp4sn3hu8d
    @user-tp4sn3hu8d 5 лет назад +1

    очень полезен урок, спасибо большое)))))))))))))))))

  • @lost3575
    @lost3575 6 лет назад +11

    спасибо за урок!)

    • @lost3575
      @lost3575 6 лет назад +1

      но я немного не понял первую часть ролика с 1:40 по 4:15!

    • @SimpleCodeIT
      @SimpleCodeIT  6 лет назад +1

      когда будем проходить динамические массивы будет более понятно.

  • @kapitoshka1175
    @kapitoshka1175 3 года назад +11

    Хотела спать, включила видео, смотрела в сонном состоянии
    Видео закончилось, я поняла то, что все поняла и даже как-то взбодрилась
    Редко такие ощущения получаю от учебы

  • @vasyekfrog267
    @vasyekfrog267 2 месяца назад

    Сергей - золотой человек, за несколько уроков поняла тему, которую невтупляла пол года. мужик сас

  • @AniViRusProd
    @AniViRusProd 3 года назад +3

    Лучший!

  • @RrRrRrRroman
    @RrRrRrRroman 10 месяцев назад

    Шикарно. Смотрел на другом канале, вообще ничего не мог понять, что за указатели!

  • @vitusink6445
    @vitusink6445 4 года назад +5

    Сергей не указал маленькую но важную фишку, и здесь и в теме о инкрементах.
    Взаимодействие инкремента и указазателя: arr[I + 1] и arr[I++] разные вещи
    Пример в коде:
    #include
    using namespace std;
    void Print(int *arr)
    {
    for (int i = 0; i < 3; i++)
    {
    cout

    • @user-uv4zh7xn2c
      @user-uv4zh7xn2c 7 месяцев назад

      Это прикол 1-е вы создали функцию для вывода массива в консоль. 2-е создали 2 массива (arr1 и arr2) и переменную " j " со значением ноль(" 0 "). 3-е запустили функцию Print и вывели в консоль массив arr1. (3, 2, 1). 4-е arr1[j + 1] = arr1[j]; присвоили элементу с индексом " 1" (arr1[j + 1]) значение элемента с индексом " 0'" (arr1[j] .Как у вас получилось J + 1 = 0 я не знаю. Должно быть " 1 ". 5-е . Запустили функцию Print(arr1); и 3 3 1
      Массив изменился потому что вы переписали значение элемента с индексом " 1". 6-е Запустили функцию Print(arr2); получили 3 2 1 7-е arr2[j++] = arr2[j];
      Присвоили элементу с индексом " 0 " значение " 3" Как это произошло?
      У постфиксного инкремента самый низкий приоритет выполнения фактически вы сделали arr2[0] присвоили arr2[j] (" 3") и J++ = 1 ( в место " 1 " должно быть 0) Запустили функцию Print(arr2) и в итоге 3 2 1 Массив остался прежним И указатели здесь не причём. Массив и так передается по ссылке. здесь вы не создавали указателя и здесь нет арифметики указателей и посмотрите урок 34( с этого надо было начать, но как получилось , так получилось).

  • @poghosyanrobert
    @poghosyanrobert Год назад

    Спасибо 👆👍

  • @outcast-cr5yy
    @outcast-cr5yy 6 лет назад +2

    Спасибо

  • @kezzaut
    @kezzaut 3 года назад

    Ты просто лучший

  • @polmesh2057
    @polmesh2057 Год назад

    Спасибо 😉

  • @Arjuna114
    @Arjuna114 5 лет назад +2

    Благодарю, интересный урок. Хотя по мне удобнее индекс использовать, для меня это нагляднее

  • @UnifiedGod
    @UnifiedGod 5 лет назад

    Открытие!

  • @p1c4ss0
    @p1c4ss0 4 года назад +1

    я имел ввиду, все уроки бомба. Автоматически лайк, не глядя =) Огромное спасибо=)

  • @timursyrma
    @timursyrma 3 года назад

    спасибо!

  • @aviator9514
    @aviator9514 2 года назад

    Автор крут!

  • @rearden3820
    @rearden3820 5 лет назад +1

    ля как интересно, лайк

  • @sleepyNovember_project
    @sleepyNovember_project 3 месяца назад

    Сначала не понял почему
    cout

  • @alexeymi2618
    @alexeymi2618 5 лет назад

    Спасиииииибоооооооооооооооо БОЛЬШОЕЕЕЕЕЕЕЕЕЕЕЕЕЕЕ !!!!!!!!!!!!!!!!!!!

  • @SimpleCodeIT
    @SimpleCodeIT  6 лет назад +23

    #указатели #арифметикауказателей #SimpleCode #урокипрограммирования

    • @SimpleCodeIT
      @SimpleCodeIT  6 лет назад +3

      пожалуйста =)

    • @overdoses1794
      @overdoses1794 6 лет назад +1

      Сергей, а какой у вас стаж работы кодером с++

  • @brffclips1
    @brffclips1 4 года назад

    Годно

  • @user-kb6qd8rg4g
    @user-kb6qd8rg4g 4 года назад

    спасибо

  • @BlackSoul57
    @BlackSoul57 2 года назад +1

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

  • @xavetar
    @xavetar 6 лет назад +63

    Имя массива является указателем на адрес его первого элемента.

    • @user-ne4bd3ry1n
      @user-ne4bd3ry1n 5 лет назад +7

      об этом не многие говорят на видеоуроках

    • @olegsh5199
      @olegsh5199 Год назад

      Первый элемент массива цифра 4?

  • @MissPew
    @MissPew 4 года назад +2

    Paint Это наше все :!)

  • @user-sx9ns9bv3o
    @user-sx9ns9bv3o 5 месяцев назад

    Я когда играл раньше в героев меча и магии 3 всегда любил ArtMoney в области памяти игры искать интовые 4х байтные значения количества армии в слоте и путем перезаписи значения адреса переменной ломал игру на количество монстров в слоте 😅

  • @user-hy4jc3dj7z
    @user-hy4jc3dj7z 4 года назад +8

    Почему когда мы выводим pArr[i] мы не разыменовываем его?? По идее же мы должны получить адрес i-того элемента ,а не его значение

    • @user-wl2gb7ls5w
      @user-wl2gb7ls5w 2 года назад

      Тоже интересует ответ на этот вопрос, либо такой синтаксис, либо я что-то упускаю. Прошу знающих подсказать, спасибо

    • @unknownhuman129
      @unknownhuman129 2 года назад

      Потому что название массива, это указатель на его первый элемент

    • @user-ow1he8qm2h
      @user-ow1he8qm2h 2 года назад

      pArr[i] это так называемый синтаксический сахар. Аналогично *(pArr +i). Разыменование уже используется. pArr[i] более удобно использовать и вариант более приемлем

  • @user-wn4vv5qo2rL
    @user-wn4vv5qo2rL 2 года назад

    Не понял момент с магией. То есть имя массива (arr) указывает на первый элемент (4)?

  • @dimitryos5254
    @dimitryos5254 5 лет назад

    Гуд )

  • @user-bb1nk1po5e
    @user-bb1nk1po5e Год назад

    привет из 2023. Спасибо большое!

  • @Novichek55
    @Novichek55 8 месяцев назад

    я правильно понял что в Java невозможно выйти за границы массива - сразу исключение выбросится, а в с++ без проблем???

  • @chelovechek7773
    @chelovechek7773 14 дней назад

    👍

  • @volerionmlbb1911
    @volerionmlbb1911 3 года назад +2

    int *pArr=arr;
    Почему мы ту так пишем ? Разве мы не адрес массива даем ? Если адрес то почему нет & впереди массива? Объясните пожалуйста.
    И почему при обращения к элементу массива мы не разименуем сначало символом "*" как простую переменную ?
    cout

    • @artefek7300
      @artefek7300 27 дней назад +1

      Ну смотри 1. Мы указываем на указатель. То есть мы указываем массиву, а массив указывает на индексы

    • @artefek7300
      @artefek7300 27 дней назад +1

      2. Потому что pArr - это указатель и он указывает уже на сами индексы

    • @artefek7300
      @artefek7300 27 дней назад +1

      Думаю вовремя ответил

    • @artefek7300
      @artefek7300 25 дней назад

      Эх жалко Сергей пропал...

  • @sergeyv7342
    @sergeyv7342 2 года назад

    Здравствуйте
    Спасибо огромное за уроки, смотрю все по порядку, очень здорово преподносите.. Огромный труд.. Очень благодарен
    Возник вопрос, понимаю что прошло много времени с записи видео , но был бы очень благодарен , если бы вы ответили, очень волнует меня этот вопрос и мешает пониманию..
    1.В конце видео все сломалось , и это вроде как хорошо, но почему сломалось? в памяти же должно быть какое - то число ? или информация ? получается его просто не было ? а если бы было программа бы взяла? или нету такого адреса?
    почему не получилось взять какое - либо число , которое находилось в памяти в тот момент?

    • @faust8th316
      @faust8th316 Год назад

      Привет:) Ответа на вопрос не знаю:( Но хотел поинтересоваться, как у тебя сейчас дела с с++ ?

    • @sergeyv7342
      @sergeyv7342 Год назад

      @@faust8th316
      привет , все хорошо, почему спрашиваешь ? смогу ответить более подробно тогда

    • @faust8th316
      @faust8th316 Год назад

      @@sergeyv7342 да, можно попродробнее. просто интересно узнать, как дела с языком у людей по прошествии нескольких месяцев или лет.
      А то кого не спросишь, у большинства аккаунты заброшены:(

    • @maksimboiko007
      @maksimboiko007 Год назад

      Ячейка памяти может быть как занята данными так и нет (т.е не ссылаться ни на что(NULL)) чаще всего место не занято т.к программа не большая и памяти много не займет.

  • @michaelgevlich2770
    @michaelgevlich2770 2 года назад

    Массивы - это быстро и весело!

  • @user-ye7vc6ug1l
    @user-ye7vc6ug1l 5 лет назад

    Спсб

  • @xavetar
    @xavetar 6 лет назад +3

    Благодаря тебе понял ещё одну деталь, огромное спасибо, но есть недочёты, которые кусают за задницу в начале.

  • @sendas3256
    @sendas3256 3 года назад

    тоесть масив работает как побитовый сдвиг вправо, с шагом в количество бит которые определяет тип переменной масива? поэтому он и начинается с нуля.
    масив указывает на первую переменную а потом сдвигает в право или в лево на шаг размером типа переменной. это много чего обясняет

  • @user-be8fo4zy8z
    @user-be8fo4zy8z Год назад

    А можно работать как-то без указателей? К примеру, как в Фортране или Бейсике?

  • @lennoxmacduff2037
    @lennoxmacduff2037 6 лет назад +1

    Уроки просто огонь
    Но вот чего понять не могу: допустим, мы объявили и инициализировали интовый массив arr[ ] (без использования SIZE, просто прописали все элементы в фигурных скобках ).
    Допустим, в массиве три элемента т.е. его размер в байтах 3*4(размер int) = 12.
    Тогда каким образом sizeof(arr) возвращает 12, если массив в функцию передается по ссылке?
    Или это уже особенности работы компилятора и ключевого слова sizeof() ?

    • @lennoxmacduff2037
      @lennoxmacduff2037 6 лет назад

      Так, вроде разобрался
      Происходит это из-за того, что массив статический.
      Но если кто-то даст более глубокий ответ - буду благодарен ;)

    • @vitalytretyak4636
      @vitalytretyak4636 6 лет назад

      Если операндом является выражение, то sizeof возвращает суммарный объем памяти, занимаемый всеми переменными и константами, входящими в него. Если операндом является массив, то возвращается объем памяти, занимаемый всеми элементами массива (т.е. имя массива не воспринимается в данном случае как указатель). Число элементов в массиве можно определить выражением sizeof array/sizeof аrrау[0].

  • @user-fp6pe4ne1q
    @user-fp6pe4ne1q Год назад

    Супер урок!
    Есть один украинский канал где тоже качественный курс по с++.
    Но эта тема здесь лучше раскрыта☝🏻

    • @user-pc7do4wr7q
      @user-pc7do4wr7q Год назад

      А як називається? Я щось не знаю укр каналів про прогу(

    • @user-fp6pe4ne1q
      @user-fp6pe4ne1q Год назад

      @@user-pc7do4wr7q Блоган в ютубі вбийте👌🏻

  • @higiro9333
    @higiro9333 3 года назад +3

    11:43 Нам повезло - программа не работает! В - везение)

  • @smdgline7680
    @smdgline7680 2 года назад

    Стоило добавить, что имя массива является обязательно константным указателем, т.е. операции *(arr++), как и другие преобразования указателя-имени массива невозможны, в отличие от операции *(arr+i) и т.п.

  • @Ms001man
    @Ms001man 5 лет назад +3

    Спасибо за урок! Трудно для понимания, конечно, но со скрипом извилин что-то да и понимаю!..

  • @user-ni9tf5yr6m
    @user-ni9tf5yr6m 2 года назад

    Вопрос появился. Могу ли я хранить слово в виде указателя, просто сдвигая на 1 sizeof(char) каждый раз, когда читаю новый символ, а в конце занулять ячейку ? По сути массив, даже string, только резиновый (по размеру)
    Спрашиваю, потому что не вижу здесь минусов. Но вроде бы каждая структура обладает обеими сторонами медали)

  • @nozimpulatov4009
    @nozimpulatov4009 5 лет назад +5

    Почему значение pArr[i] показывает значение, вместо адреса
    Ведь вроде
    pArr[i]- адресс
    *pArr[i]-значение этого адресса

    • @rostislavteryaev3894
      @rostislavteryaev3894 5 лет назад +5

      Если я верно понимаю, то используя квадратные скобки [], указатель уже разыменовывается (неявно) и превращается в значение.

    • @katezombie3435
      @katezombie3435 4 года назад +6

      pArr[i] -> *(pArr + i). если i = 0, то будет просто *pArr а это уже значение 1 элемента массива. ну и тд

  • @olegbocharnikov950
    @olegbocharnikov950 6 лет назад +5

    Спасибо есть одна идейка как использовать выделенную память
    // генератор случайных чисел основанный на разнице ячеек динамической памяти
    #include
    using namespace std;
    int main()
    {
    setlocale(LC_ALL, "Rus");// Русификатор
    int i=0; // отдельная переменная для считывания цикличности
    // создаем указатели для резервирования памяти
    int *pa = new int; // задаем случайный новый адрес для pa
    int*pb = new int;// задаем случайный новый адрес для pb
    if (pa

    • @fillmalyshev9377
      @fillmalyshev9377 6 лет назад +2

      Этот код не работает. К тому же код еще плох тем что вы не освобождаете память операцией delete.

    • @bestofthebester397
      @bestofthebester397 6 лет назад

      int *pa = new int; // задаем случайный новый адрес для pa int*pb = new int;// задаем случайный новый адрес для pb - адреса не будут новыми - они при одном и том же запуске - одинак.

  • @miniputlol
    @miniputlol 3 года назад

    У меня возник вопрос. Если при записи *(arr + i) программа делает сдвиг на количество байт сообразно типу данных i, не получится ли какая-то ошибка в случае, когда массив имеет другой тип данных (double, к примеру)?
    п.с. отдельное спасибо за Ваши уроки, они лучшие❤️

    • @user-fl6jp7zq2i
      @user-fl6jp7zq2i 2 года назад

      В этом случае i должна иметь тот же тип данных, что и данные в массиве. Так как int имеет размер 4 байта, то запись arr + i сдвигает на 4 байта, таким образом мы переходим к следующей ячейке памяти, где тоже хранится int'овое значение.
      Поэтому если нужно оперировать типом данных double, i должна быть тоже double, чтобы счётчик ровно отсчитывал ровно 1 ячейку.

    • @kadencode5347
      @kadencode5347 2 года назад +1

      @@user-fl6jp7zq2i не говорите бред.

    • @user-uv4zh7xn2c
      @user-uv4zh7xn2c 7 месяцев назад

      А есть индекс со значением " 1.5 ?

    • @user-uv4zh7xn2c
      @user-uv4zh7xn2c 7 месяцев назад

      @@user-fl6jp7zq2i А есть индекс со значением " 1.5 ?

  • @pavel2232
    @pavel2232 5 лет назад

    cout

    • @BadDanFeeds
      @BadDanFeeds 5 лет назад +5

      Так как имя массива - указатель, то и работать с ним можно как с указателем, например:
      1) cout

    • @TheWladberlin
      @TheWladberlin 4 года назад +1

      @@BadDanFeeds "1) cout

  • @user-uv4zh7xn2c
    @user-uv4zh7xn2c Год назад +1

    Я думаю самая не понятная ситуация с типом String. Объясните пожалуйста сколько памяти выделяется на один элемент.

    • @sleepyNovember_project
      @sleepyNovember_project 3 месяца назад

      Если string реализован действительно классом, то наверное прилично, так как там должны быть свои всякие поля с типами данных которые тоже имеют размеры

  • @clydewarrior2255
    @clydewarrior2255 5 лет назад

    На 2:33 Я не понял
    Мы в указатель записали адрес первого элемента массива pArr = arr;
    А потом, в цикле, мы обращаемся к указателю, как к массиву указателей pArr[i]
    Но мы же не создавали массив указателей. К тому же мы записали в него только адрес первого элемента массива, откуда появляется доступ к остальным элементам?
    Подскажите пожалуйста

    • @alexeyprofit5911
      @alexeyprofit5911 5 лет назад

      5:23 - массив - это непрерывная область памяти. Вот так и получаешь доступ к другим ячейкам

    • @user-gc5td9zq3b
      @user-gc5td9zq3b 5 лет назад

      я понял так. Этой строкой мы задаем, что значение первого элемента массива pArr надо брать по адресу первого элемента массива arr. В таком случае другие элементы тоже берутся соответственно с других ячеек с шагом 4 бита. Размер массива вообще судя по всему пофиг)). Можешь отсканировать всю оперативу)))). Ой ой - дальнейший ход мысли лучше не озвучивать в эфире. Веселый С++)))

  • @paulm6529
    @paulm6529 5 лет назад

    Попытался написать одномерный массив типа char. Объясните, пожалуйста, что не так. Почему пробелы игнорируются и выводятся только первые 10 символов?
    int main()
    {
    cout *(line+i);
    size+=1;
    }
    cout

    • @user-nq5zw9zv1t
      @user-nq5zw9zv1t 7 месяцев назад

      хз

    • @artefek7300
      @artefek7300 27 дней назад

      Ну я конечно незнаю, но ты забыл удалить динамический массив может в этом проблема

  • @user-ne4bd3ry1n
    @user-ne4bd3ry1n 5 лет назад

    все что связано с указателями одинаково в Си и С++ ? уроки по указателям в С++ подходят для Си?

    • @wickedtorpedo75
      @wickedtorpedo75 5 лет назад

      логика да однозначно подходит, но синтаксис в некоторых моментах могут быть другой.

  • @Viamsupervadetvadens
    @Viamsupervadetvadens 6 лет назад +1

    up

  • @user-kz8pw3qf6i
    @user-kz8pw3qf6i 5 лет назад

    int элемент массива весит 4 байта => Если интовый (int) массив начинался с 0FD0000, к примеру, то прибавив к адресу 4 (0FD0004) получим второй элемент массива?
    Просто я делал такую вещь: cout

    • @poloston3583
      @poloston3583 5 лет назад

      Это адреса в 16 ричной системе а не число само

    • @user-gc5td9zq3b
      @user-gc5td9zq3b 5 лет назад

      @@poloston3583 адреса меняются в оперативе при каждом новом запуске программы

  • @user-ww2ct6db5j
    @user-ww2ct6db5j 6 лет назад

    Тоесть если имя массива это указатель на первый елемент,то вывод такой:массив хранит адреса в которых есть значения и что это указатель который хранит несколько адресов?

    • @SimpleCodeIT
      @SimpleCodeIT  6 лет назад +4

      Нет, указатель хранит только один адрес, но добавляя, например, 1 к этому адресу, мы делаем отступ в памяти с шагом, который зависит от того, на какой тип данных указывает указатель.

  • @vartsevich8501
    @vartsevich8501 8 месяцев назад

    6:18 Перекопал весь инет и не нашел чтоб настроить по умолчанию горячими клавишами коментировать /**/. Все что-то умничают некой чушью, но чтоб нажать гор.клавишу на выделенный текст и закоментить /**/ - нет. Подскажите как это сделать, так как вижу это на этом видосе.

    • @nicistey3895
      @nicistey3895 5 месяцев назад

      Ctrl+C

    • @sleepyNovember_project
      @sleepyNovember_project 3 месяца назад

      @@nicistey3895 Ctrl K затем Ctrl C
      А Ctrl K, затем Ctrl D форматирует файл (выравнивает код)(только не выделенный фрагмент, а сразу во всём файле)

  • @user-iz4sq7if4g
    @user-iz4sq7if4g 5 лет назад

    it is magic

  • @raptor7125
    @raptor7125 4 года назад

    Я не могу понять. В цикле for мы переменной i двигаемся по массиву, но почему, если i = 2, сдвиг происходит все равно на 4 байта, а не на 8?

    • @user-zg9du7nu9q
      @user-zg9du7nu9q 4 года назад +1

      на 8. ты забывешь что у тебя i=2 это третий элемент и он указывает на адрес начала третьего элемента
      #include
      #include
      using namespace std;
      int main()
      {
      int arr[3];
      for (int i = 0; i < sizeof (arr)/sizeof(int); i++)
      {
      cout

  • @igorgutan6202
    @igorgutan6202 2 года назад

    до какого урока мне нужно посмотреть, чтобы начать писать на Unreal Engine???

    • @samratshaxmerdenov8186
      @samratshaxmerdenov8186 Год назад

      С таким подходом, тебе лучше на блюпринтах работать, зачем себя мучаешь с плюсами?

  • @justafish_
    @justafish_ 9 месяцев назад

    Если имя массива - это действительно указатель на его первый элемент, то почему sizeof(arr) != sizeof(&arr[0]), то есть почему sizeof возвращает размер всего массива, а не размер указателя?

    • @clashsmash9763
      @clashsmash9763 8 месяцев назад +2

      Потому что массив (статический) это все-таки не указатель. Они очень тесно связаны, но это не одно и то же. И разное поведение sizeof это красноречиво подтверждает.
      Массив превращается в указатель (сравнивается с указателем) в двух случаях - при применении оператора доступа (например a[0], что то же самое что *(a+0)) и при передаче в функцию.

  • @volodymyrgutsu7011
    @volodymyrgutsu7011 6 лет назад +5

    мне удалось получить значение из адреса за пределами массива, прога не крашнулась.

    • @user-ne4bd3ry1n
      @user-ne4bd3ry1n 5 лет назад +1

      запишите что нибудь за пределы проги

    • @user-qp3xs4jj5p
      @user-qp3xs4jj5p 4 года назад +5

      @@user-ne4bd3ry1n Крашните хром. Ибо вся оперативка явна у него))

  • @unclemax1
    @unclemax1 2 года назад +1

    А можно и так пробежаться по массиву)
    int arr[5] = {10, 20, 30, 40, 50};
    for(int* p = arr; p < arr + 5; ++p)
    cout

    • @maksimboiko007
      @maksimboiko007 Год назад

      Добрый день, хочу спросить прошли ли вы курс до конца?

    • @unclemax1
      @unclemax1 Год назад

      @@maksimboiko007 Вы про эти видео? Эти видео подходят лишь для закрепления уже изученного материала, да и то в них мало информации. Советую читать книги)

  • @user-iz4sq7if4g
    @user-iz4sq7if4g 5 лет назад

    я теперь понял почему масивы и в фунции не меняли значения

  • @vladyslavkryvoruchko
    @vladyslavkryvoruchko Год назад

    Можно сойти с ума и использовать px[0] в качестве разименования!

  • @vavilen
    @vavilen 6 лет назад +2

    Посоветуйте литература по c+c, пожалуйста

    • @batfist6595
      @batfist6595 5 лет назад +2

      Страуструп. Сам создатель языка написал книгу

    • @user-rd4be1wk2j
      @user-rd4be1wk2j 5 лет назад +5

      =2c

  • @student6842
    @student6842 4 года назад

    Кто подскажет, пожалуйста, почему ошибка C2440:
    #define N_rows 3
    #define N_cols 3
    int arr[N_rows][N_cols];
    int *ptr_a = arr; // Ошибка C2440 инициализация: невозможно преобразовать "int [3][3]" в "int *"
    Спасибо.

    • @borisblade1403
      @borisblade1403 4 года назад +1

      Так как имя массива является указателем, то у вас получается указатель на указатель. Если разименовать массив, то ошибки не будет: int *ptr_a = *arr;

    • @minalex8777
      @minalex8777 2 года назад

      @@borisblade1403 Спасибо, наконец то избавился от ошибки с двумерным массивом. Но почему тогда у автора с одномерным массивом в 18 строке эта ошибка не вылезает? Ведь и у него arr - это имя массива и является указателем?

  • @JohnSmith-es2fh
    @JohnSmith-es2fh 3 года назад

    фааааааааааак! Я раньше сток времени тратил на то, чтобы массив в функцию запихать

  • @yellowmoonishka1725
    @yellowmoonishka1725 Год назад

    Ths

  • @mikesteinar2713
    @mikesteinar2713 3 года назад

    Тааак, що ти нам тут приготував...