|
0 / 0 / 0
Регистрация: 31.07.2014
Сообщений: 24
|
||||||||||||||||
Имя массива в С++ это указатель или ссылка?12.06.2020, 14:18. Показов 13926. Ответов 133
Метки нет (Все метки)
Пытаюсь понять что такое имя массива в С++! Указатель или ссылка? Сразу скажу что пока рассматриваю только статические массивы.
Теория говорит что это указатель, собственно поэтому для имени массива применима арифметика указателей. Но! раз это указатель, то значит это переменная под которую компилятор выделил ячейку памяти в которой должен храниться адрес первого элемента массива arr[0]. Раз такая ячейка памяти есть то по идее можно узнать ее адрес так - &arr! К сожалению такой трюк не работает и получается что &arr==arr! Для меня это никак не укладывается под описание указателя. Попробовал выяснить по аналогии с простой переменной что такое указатель, а что такое ссылка! Вот простенький код для простой переменной и результат его выполнения: Кликните здесь для просмотра всего текста
Результат говорит о том что если переменная "b" - указатель на переменную "a", то переменная b находится в памяти по адресу &b и содержит значение адреса переменной a равное &a. Все вполне согласуется с теорией. Если же переменная "d" - ссылка на переменную "a", то для переменной b вроде как не выделяется памяти, по крайней мере собственного адреса в памяти для переменной d нет и операция &d дает лишь адрес переменной a. Если поступить аналогично с массивом? Кликните здесь для просмотра всего текста
Если объявить указатель pArr на массив arr, то видно что для pArr аналогично указателю простой переменной выделяется место в памяти с адресом &pArr в которой содержится адрес первого элемента массива arr[0]. Все как бы укладывается в мои представления. А что же с именем массива? Ведь утверждается что это указатель на 1й элемент этого массива arr[0]. Операция &arr дает адресс такой же как и у первого элемента массива, как будто нет никакого указателя а есть ссылка по аналогии с обычной переменной! Но почему же тогда для имени массива доступна арифметика указателя? для обычной ссылки такого ведь нет. В последнем примере все указатели имеют тип void* (не знаю насколько это корректно), поэтому думаю что корректней следующий код, но результат тот же самый! Имя массива как будто является ссылкой а не указателем. Кликните здесь для просмотра всего текста
У меня такое представление об указателях, что это переменная которая в памяти имеет собственное место т.е. имеет свой адрес и содержит адрес переменной на которую указывает. примерно как на следующем рисунке: Все же объясните что такое имя массива? указатель или ссылка? или у меня неправильное представление об этих вещах?
0
|
||||||||||||||||
| 12.06.2020, 14:18 | |
|
Ответы с готовыми решениями:
133
Указатель или ссылка на указатель. В чем разница? Указатель на константную строку и имя массива как указатель
|
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
|
| 12.06.2020, 23:53 | |
|
argcargv,
1) хорошо, что про std::move не вспомнил ![]() 2) я к тому, что будет в returns ты это не уточнил 3) да никто не спорит с тем что идея назначить указателям значения из твоей ссылки было позже чем addressof 4) я не проводил хороших анализов поэтому ничего предлагать не буду, вместо этого мне просто нужно было что бы ты подкрепил свои доводы 5) можно и так ) не суть, главное что бы отражало ту картину которую ты нарисовалладно, я вижу разговор к сожалению заходит в тупик, в связи с чем предлагаю замять это дело...
0
|
|
|
248 / 70 / 9
Регистрация: 22.07.2018
Сообщений: 321
|
|
| 12.06.2020, 23:58 | |
|
0
|
|
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
||
| 13.06.2020, 00:17 | ||
|
argcargv,
Круто... А ты дальше читал?
0
|
||
|
248 / 70 / 9
Регистрация: 22.07.2018
Сообщений: 321
|
|
| 13.06.2020, 00:21 | |
|
0
|
|
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
|
| 13.06.2020, 01:05 | |
|
argcargv,
А то что тут Имя массива в С++ это указатель или ссылка? Ты говоришь что оператор определён для значений указателя а не для адресов. Затем тебя никак не смущает что значение указателя вполне себе может быть адресом. Т.к значение может быть адресом, и сравниваем мы значения, в получается что в таком случае мы сравниваем адреса. Тогда я так понимаю твой вариант описания addressof ошибочный... значение указателя в твоей интерпретации по ссылке выше не бывает адресом, оказывается противоречивым. Потому что если значение указателя не бывает адресом, то как тогда addressof может возвращать предлагаемый тобой pointer? Ведь значение поинтера как мы выяснили может быть адресом ) Добавлено через 3 минуты обновил
0
|
|
|
248 / 70 / 9
Регистрация: 22.07.2018
Сообщений: 321
|
|
| 13.06.2020, 01:18 | |
|
0
|
|
|
Нарушитель
10908 / 5836 / 1289
Регистрация: 12.03.2015
Сообщений: 26,934
|
|
| 13.06.2020, 01:58 | |
|
Пока до мордобоя не дошло:
Кликните здесь для просмотра всего текста
0
|
|
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
|||
| 13.06.2020, 03:51 | |||
|
Хорошо бы вы еще раз рассмотрели пример выше и поняли, что совсем необязательно привлекать какой-то стек и регистры для представления того, что там происходит. Стек и регистры возникают, если вообще возникают, значительно позже. И когда они возникли, то язык С++ уже закончился.
0
|
|||
|
0 / 0 / 0
Регистрация: 31.07.2014
Сообщений: 24
|
|||
| 13.06.2020, 06:52 [ТС] | |||
|
В моей голове итак сейчас такая каша! ... а тут еще это! Каким образом значение указателя не может быть адресом? Как по мне так оно не может быть ничем другим кроме адреса! Хоть он явный хоть он неявный - это должно быть какое-то число равное адресу. Собственно потому его так и назвали наверное что он указывает и говорит о том что какой-то объект находится по конкретному адресу содержащемуся в указателе. Что-то слишком дохрена абстракций на мою голову... это меня убивает) Чем мне нравится ассемблер - так это своей конкретикой... есть память, есть регистры... и делай с ними все что хочешь в рамках набора команд! Все просто и конкретно. Добавлено через 3 минуты
0
|
|||
| 13.06.2020, 06:53 | |
|
0
|
|
|
Вездепух
13235 / 6867 / 1827
Регистрация: 18.10.2014
Сообщений: 17,400
|
||
| 13.06.2020, 06:54 | ||
lea регистр, адрес и mov регистр, указатель (в терминах ассемблера x86) - это фактически та же разница между lvalue и указателем, которую мы обсуждаем здесь. И в ассемблере тоже они зачастую вызывают трудности с пониманием.
0
|
||
|
248 / 70 / 9
Регистрация: 22.07.2018
Сообщений: 321
|
||
| 13.06.2020, 09:52 | ||
|
Понятие "адрес" связано со значениями указателей косвенно и особо в языке нигде не участвует. Из мест, где играет роль то, какой адрес представляют значения указателей, могу вспомнить только: сравнение указателей на равенство и std::launder.
0
|
||
|
"C with Classes"
|
||
| 13.06.2020, 10:30 | ||
offset в источнике команды mov не пропустил? и что понимается под адрес и указатель?
0
|
||
|
248 / 70 / 9
Регистрация: 22.07.2018
Сообщений: 321
|
||||
| 14.06.2020, 08:41 | ||||
0, а не то, что под "первым" понимается элемент, чей адрес совпадает с адресом самого массива, как в
1
|
||||
| 14.06.2020, 08:41 | |
|
как такое правильно писать? это ссылка на указатель? Что лучше ссылка или указатель?
Как ускорить работу. Ссылка или указатель
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет!
За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
|
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык.
Возвращает он вот это:
https:/ / i. **********/ vqBWLe2. png
Нужную строчку в 3й колонке просто выдумал. .
Это. . .
|
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor.
Это. . .
|
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js.
В помощники взял Яндекс-Алису.
Было создано три зала на разные интересы.
исторические и ретро
сериал Хичкок. . .
|
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
|
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#.
Название изменил на ColorStep.
Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
|
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами:
- ВидТО (СправочникСсылка. ВидыТО);
- ВидГСМ. . .
|
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|