|
0 / 0 / 0
Регистрация: 31.07.2014
Сообщений: 24
|
||||||||||||||||
Имя массива в С++ это указатель или ссылка?12.06.2020, 14:18. Показов 12607. Ответов 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
Указатель или ссылка на указатель. В чем разница? Указатель на константную строку и имя массива как указатель
|
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
|
||
| 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
|
||||||
|
Злостный нарушитель
10359 / 5774 / 1274
Регистрация: 12.03.2015
Сообщений: 26,686
|
||
| 12.06.2020, 23:47 | ||
|
0
|
||
| 12.06.2020, 23:47 | |
|
Помогаю со студенческими работами здесь
120
как такое правильно писать? это ссылка на указатель? Что лучше ссылка или указатель?
Как ускорить работу. Ссылка или указатель
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
|
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога
Финальные проекты на Си и на C++:
hello-sdl3-c. zip
hello-sdl3-cpp. zip
Результат:
|
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога
MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
|
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд.
Даже если у вас. . .
|
|
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает
монорепозиторий в котором находятся все исходники.
При создании нового решения, мы просто добавляем нужные проекты
и имеем. . .
|
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение:
В этой книге («Подход, основанный на вариантах использования») Ивар утверждает,
что архитектура программного обеспечения — это
структуры,. . .
|
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога
Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
|
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip
На первой гифке отладочные линии отключены, а на второй включены:. . .
|