#31. Указатели на массивы | Язык C для начинающих

  Рет қаралды 14,022

selfedu

selfedu

Күн бұрын

Пікірлер: 28
@trimo1120
@trimo1120 Жыл бұрын
Познавательно! Последняя фраза очень поразила меня и заставила задуматься, вот я, иногда, вместо 3 пишу 0b11, на деле это бессмысленно, ведь код становится нечитабельным и тут я показываю не свои познания в области информатики, а свою небрежность к коду, в итоге программа скомпилирует, почти одинаковый код. Кстати, спасибо за превосходный видеоурок!
@АнДа-х5ъ
@АнДа-х5ъ 10 ай бұрын
Учитель от Бога!
@anvarx1
@anvarx1 Жыл бұрын
Великолепный урок !!! Спасибо никогда не различал между указателем на массив и его указателем копией.
@andredru4278
@andredru4278 11 ай бұрын
Спасибо. Я немного шокирован ) Мощь!
@SMV1972
@SMV1972 9 ай бұрын
Огромное Спасибо! Я вообще ноль, и то все понятно. Очень хорошо объясняете
@alexdubkov6998
@alexdubkov6998 Жыл бұрын
Отлично! Поскольку берется данные из ячейки, адрес которой есть просто сумма начального адреса (пусть, ptr_ar=106) и смещения (в данном случае=2), то получается, что мы берем данные из ячейки 106+2=108. И неважно, как мы это вычислили: 106+2 или 2+106. Спасибо Вам за ваши уроки!
@diisspersion
@diisspersion 2 ай бұрын
sizeof(ptr_arg) - возвращает размер переменной ptr_arg, которая является указателем. На 64-битной системе любой указатель (независимо от того, на что он указывает) имеет размер 8 байт. Поэтому len2 должно по идеи быть равно 8.
@АлександрЧерданцев-у7н
@АлександрЧерданцев-у7н 19 күн бұрын
Моё почтение, сударь! Откуда у вас такие "глубокие" знания о размере указателя на 64-битных системах? Я новичок в программирование, но из предыдущих видео уважаемого автора этого канала понял, что размер указателя определяется при его объявлении типом данных, с которыми он будет работать, т.е. на которые он будет указывать. Поэтому я думал, что len2 должен был быть 2, т.к. short *ptr_ar; Следовательно, либо на 64-битной системе тип short занимает в оперативной памяти 4 байта, либо тут что-то наделал тип size_t при объявлении переменной len2? Странно, что сам автор на это никак не обратил внимание и не пояснил данный момент.
@jamjam3337
@jamjam3337 Жыл бұрын
спасибо!👏👍💪
@Вайс-я8з
@Вайс-я8з 3 ай бұрын
Я не встретил в видео упоминания (поправьте меня, если это не так) о том, что для всех указателей адрес увеличивается или уменьшается на величину, равную размеру объекта того типа, на который они указывают. Просто изначально я не понял, что за условная единица (или несколько оных) добавляется к указателю на массив ar (т.е. что она из себя представляет, 1 байт или 2, или больше?). Оставлю комментарий для таких же как я.
@selfedu_rus
@selfedu_rus 3 ай бұрын
об этом дальше в адресной арифметике
@АлександрЧерданцев-у7н
@АлександрЧерданцев-у7н 19 күн бұрын
@@selfedu_rus может раньше? Адрес Арифметика, вроде, уже как была? Но из неё я почему-то не понял, что размер самой ячейки памяти (или регистра), в которой хранится сам указатель всегда одинаковый и зависит от разрядности ОС, под которую пишется программа. Поправьте меня, если я не прав.
@donfedor007
@donfedor007 Жыл бұрын
Спасибо вам! ar[idx] получается это своего рода синтаксический сахар)
@selfedu_rus
@selfedu_rus Жыл бұрын
да
@planetskaro3782
@planetskaro3782 Жыл бұрын
Сергей, здравствуйте. Почему len_2 равна 4? Шорт ведь двухбайтовые, для len_1 сходится 2*7=14, а вот со второй?
@selfedu_rus
@selfedu_rus Жыл бұрын
short *ptr_ar; определяет указатель, который работает с данными типа short; здесь тип short относится не к указателю, размер указателей всегда соответствуют разрядности программы. Если она 32-х разрядная, то указатели занимают 4 байта. Именно это и отражено в ролике.
@powerri1992
@powerri1992 7 ай бұрын
Здравствуйте, можете пожалуйста, более подробно рассказать почему len_2 равна 4, я видел комментарий с таким же вопросом но там не очень понял ответ, так как знаю что Шорт размером в 2байта а значит и указатель на Шорт тоже 2 байта, спасибо!
@powerri1992
@powerri1992 7 ай бұрын
Или это именно размер вместимости самого места куда помещается адрес?
@СамуилИгоревич
@СамуилИгоревич 4 ай бұрын
​​​@@powerri1992Да, 4 байта в данном случае(32 битная архитектура) - размер области памяти, которая отводится под указатель. На 64 битной - соответственно 8 байт отводится под хранение адреса. Попробуй написать printf("%zu", sizeof(short*)); printf("%zu", sizeof(short)); и сравни. Для удобства можно считать типами short*, double*, void* и т. д. Размер выделенной под указатель памяти не зависит от того, на какой тип он ссылается, а только от разрядности компилятора и ОС.
@СамуилИгоревич
@СамуилИгоревич 4 ай бұрын
По поводу того, можно ли считать short* типом, есть мнение, что нельзя, так как short* a, b; a - указатель, b - обычная переменная(а мы предлагаем, что указатель). Для этого лучше объявлять указатели и обычные переменные на разных строчках, чтобы избежать путаницы.
@powerri1992
@powerri1992 4 ай бұрын
@@СамуилИгоревич спасибо
@powerri1992
@powerri1992 4 ай бұрын
@@СамуилИгоревич спасибо
@РусланКарнеенко
@РусланКарнеенко 10 ай бұрын
Спасибо
@smolewood
@smolewood Жыл бұрын
Скажите, а почему конструкт short x = *prt_ar; не срабатывает как только добавляешь индексы в квадратных скобках, например при таком операторе short x = *prt_ar[2]; - компилятор уже выдает ошибку, как только добавляешь индексы в квадратных скобках звездочка уже на нужна?
@mishka5284
@mishka5284 Жыл бұрын
Потому что ptr_ar[2] эквивалент записи *(ptr_arr+2) и мы не может ещё раз записать звёздочку, так как это уже тип int
@НиколайШуман-ч9ю
@НиколайШуман-ч9ю Жыл бұрын
Ребята, подскажите пожалуйста ! Как получить доступ к скрытому контенту )
@igorseledtsov7345
@igorseledtsov7345 4 ай бұрын
укзатели это просто указатели , а не указатели на массивы
UFC 310 : Рахмонов VS Мачадо Гэрри
05:00
Setanta Sports UFC
Рет қаралды 1,2 МЛН
Quando eu quero Sushi (sem desperdiçar) 🍣
00:26
Los Wagners
Рет қаралды 15 МЛН
VIP ACCESS
00:47
Natan por Aí
Рет қаралды 30 МЛН
Quilt Challenge, No Skills, Just Luck#Funnyfamily #Partygames #Funny
00:32
Family Games Media
Рет қаралды 55 МЛН
Двумерные массивы в Си: обычные и динамические
21:49
Тимофей Хирьянов
Рет қаралды 75 М.
Создание и заполение массива на Си
12:35
Тимофей Хирьянов
Рет қаралды 85 М.
Всё об указателях в C++ за 20 минут
20:00
Язык Си для начинающих / #3 - Массивы данных
19:09
Адреса и указатели в Си. Адресная арифметика
27:47
Тимофей Хирьянов
Рет қаралды 167 М.
UFC 310 : Рахмонов VS Мачадо Гэрри
05:00
Setanta Sports UFC
Рет қаралды 1,2 МЛН