|
0 / 0 / 0
Регистрация: 31.07.2014
Сообщений: 24
|
||||||||||||||||
Имя массива в С++ это указатель или ссылка?12.06.2020, 14:18. Показов 13966. Ответов 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
Указатель или ссылка на указатель. В чем разница? Указатель на константную строку и имя массива как указатель
|
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
||
| 12.06.2020, 21:06 | ||
|
Если человек возьмет среднестатистический учебник для начинающих, он будет полон этих неверных ударений и если он потом захочет узнать как же на самом деле, то это будет настоящим мучением. Для автора этот тред полон откровений, потому что его изначально убедили в какой-то особой двойственной природе массивов, в соседних тредах других авторов убедили в какой-то особой магической природе указателей. Результат даже самой стройной логики будет ложным, если строить ее на ложных предпосылках. Так что я с вами "системно-аналитически" не согласен.
1
|
||
|
248 / 70 / 9
Регистрация: 22.07.2018
Сообщений: 321
|
|
| 12.06.2020, 21:07 | |
|
Undisputed, я ХЗ как отвечать на очевидные вопросы. Потому что что есть значение указателя уточнили относительно недавно и не обновили ещё все места в стандарте. Поэтому фиксить надо описание addressof.
0
|
|
|
Комп_Оратор)
|
||
| 12.06.2020, 21:08 | ||
|
Преобразование в данном случае мне не понятно. Я знаю что оно происходит когда оно ожидаемо. Почему << потока ждёт такого преобразования? Другими словами, - у программиста отвалится рука набрать указатель, если он ЕГО хочет распечатать? Эта неявность ломает мозг тем кто с этим сталкивается впервые.
0
|
||
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
|
| 12.06.2020, 21:10 | |
|
argcargv,
для меня это не очень очевидно хотя бы потому что я допускаю что в тот список забыли добавить адреса но судя по твоим постам не забыли, а не добавили специально вот это мне и интересно, почему ты считаешь что адреса не добавили спецом если бы ты рассказал мне об этом, то я бы исправился
0
|
|
|
Неэпический
|
|||||||
| 12.06.2020, 21:24 | |||||||
Array умеют преобразовываться в указатели.То, что у потока перегружен operator<< для вывода void *, и поэтому применяется соответствующее преобразование вас не удивляет?
0
|
|||||||
|
Комп_Оратор)
|
||||||||
| 12.06.2020, 21:58 | ||||||||
0
|
||||||||
|
248 / 70 / 9
Регистрация: 22.07.2018
Сообщений: 321
|
|
| 12.06.2020, 22:07 | |
|
1
|
|
|
Комп_Оратор)
|
||
| 12.06.2020, 22:15 | ||
|
Возьмите и скажите о семантике значений. О том как копируются простые переменные типа int, скажем. О том что массивы некопируемы по своему замыслу и не поддерживают такого поведения и поэтому не передаются по значению. Мой случай инициализации это показывает. То есть родство массивов и указателей в природе массива. А уж как сделано так и сделано.
0
|
||
| 12.06.2020, 22:16 | ||
|
Не по теме:
Вот пример.
0
|
||
|
Комп_Оратор)
|
||
| 12.06.2020, 22:22 | ||
|
0
|
||
|
2 / 2 / 1
Регистрация: 31.03.2018
Сообщений: 11
|
|||||||||||
| 12.06.2020, 22:27 | |||||||||||
|
Сколько информационного шума из-за одного вопроса.
![]() Добавлено через 4 минуты Если Вы имеете название переменной - то ни то, ни другое. Массив — это область памяти, где могут последовательно храниться несколько значений. С помощью ссылки можно задавать альтернативное имя для переменной. По сути, ссылка в C++ — это безопасные указатель, которые ссылается на адрес какой-либо переменной. Например:
0
|
|||||||||||
|
"C with Classes"
|
|
| 12.06.2020, 22:28 | |
|
0
|
|
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
|
| 12.06.2020, 22:30 | |
|
argcargv,
Почему нет ответа?) Я не ради поспорить, просто ты уверенно заявил, но не обосновал. Как к такому заявлению тогда относится? Появляются вопросы. Например, вот ещё: на что именно ты предлагаешь заменить описание addressof? Что кроме адреса addressof мог бы возвращать? (Ну и предыдущий вопрос).
0
|
|
|
248 / 70 / 9
Регистрация: 22.07.2018
Сообщений: 321
|
||||
| 12.06.2020, 22:35 | ||||
|
Добавлено через 3 минуты
2
|
||||
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
|
| 12.06.2020, 22:42 | |
|
argcargv,
Тогда название функции не будет соответствовать тому что оно делает. К тому же, значение pointer-а как ты сам отметил вещь неоднозначная. Если бы ты дал ссылку например на Страуструпа где он говорит обо всем этом я бы понял. Иначе это просто выглядит так что ты просто подгоняешь некоторые вещи под то как ты сам видишь эту ситуацию
0
|
|
|
248 / 70 / 9
Регистрация: 22.07.2018
Сообщений: 321
|
|||||
| 12.06.2020, 22:55 | |||||
|
0
|
|||||
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
|
| 12.06.2020, 23:10 | |
|
argcargv,
Цитирование глючит в телефона но я думаю ты поймёшь что у чему относится: 1) конечно, это проблема. имя функции должно отражать действия которые выполняет эта функция. это же не функция которая написана новичком 2) ты явно не отмечал, но дал ссылку где в качестве значения указателя может быть несколько вариантов 3) можно ссылаться на кого нибудь кто имеет какое то отношение к стандартизации, иначе то о чем ты говоришь не более чем твоё мнение, не имеющее отношение к стандарту о котором мы в данном случае говорим 4) ну типа вординг надо поправить, причём именно так, как это говоришь ты и никак по другому... мне вот интересно ты это сам придумал или можешь ссылаться на того кто занят стандартизацией? Значит что я хочу.. Если это просто твоё мнение то что бы ты сказал это Если же это конкретные знания из первоисточника то поделись пожалуйста этим источником
0
|
|
|
248 / 70 / 9
Регистрация: 22.07.2018
Сообщений: 321
|
||||||
| 12.06.2020, 23:40 | ||||||
|
0
|
||||||
|
Злостный нарушитель
10908 / 5836 / 1289
Регистрация: 12.03.2015
Сообщений: 26,935
|
||
| 12.06.2020, 23:47 | ||
|
0
|
||
| 12.06.2020, 23:47 | |
|
как такое правильно писать? это ссылка на указатель? Что лучше ссылка или указатель?
Как ускорить работу. Ссылка или указатель
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version
Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
|
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер
На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
|
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/
TL DR
Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
|
ИИ не может найти нужный язык в списке
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.
Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
|