Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.70/27: Рейтинг темы: голосов - 27, средняя оценка - 4.70
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484

Что такое указатель на массив?

18.02.2020, 15:28. Показов 7344. Ответов 108
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Указатель на массив это указатель на первый элемент массива?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
18.02.2020, 15:28
Ответы с готовыми решениями:

Что такое хэндлер файла? Что такое файловый указатель?
Что такое хэндлер файла? Что такое файловый указатель?

Что такое указатель на абстрактный класс?
В задании сказано - Методы класса должны принимать указатель на абстрактный класс , что это значит и как это реализовывается?

Что такое указатель на член класса?
Что такое указатель на член класса?

108
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
19.02.2020, 09:03
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от ReYalp Посмотреть сообщение
а то что arr заменяется на &arr[0] это правда
Нет, это тоже неправда.
Оно не заменяется, а приводится. Т.е. в определенные моменты одна сущность порождает другую. При этом исходная сущность никуда не девается. Вы понимаете, что значит приведение?

Добавлено через 1 минуту
Цитата Сообщение от Croessmah Посмотреть сообщение
В книге должно быть "неявно преобразовывает", а не "автоматически заменяет".
Кстати, конкретно в случае с Липпманом это все-таки может быть ошибка переводчика.
Я не очень-то верю в то, что Липпман стал бы пользоваться подобного рода упрощениями.
В какой-то другой книге другого автора - возможно, видел такое.
0
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
19.02.2020, 09:06  [ТС]
DrOffset, точнее сказать не с массивами, а с указателя и на них. Вы сами раньщ писали что arr неявно становится указателем на первый подмассив( я пишу о int arr[10][20]), тоесть arr = int (*p) [20], что будет если я теперь сделаю &arr? Разве не адрес указателя?
0
19.02.2020, 09:06

Не по теме:

Цитата Сообщение от DrOffset Посмотреть сообщение
Кстати, конкретно в случае с Липпманом это все-таки может быть ошибка переводчика.
Возможно. Я не читал. Или читал, но не помню. :)

0
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
19.02.2020, 09:07  [ТС]
DrOffset, ну просто в книге есть отдельно неявно преобразовывает и отдельно автоматически заменяет, мне кажется ошибки перевода нету
0
Неэпический
 Аватар для Croessmah
18150 / 10732 / 2067
Регистрация: 27.09.2012
Сообщений: 27,047
Записей в блоге: 1
19.02.2020, 09:09
ReYalp, название, издание и главу где это написано напишите.
0
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
19.02.2020, 09:11  [ТС]
Croessmah, int arr [10][20] - arr даст int (*p) [20], &arr даст int (*p) [10]?

Добавлено через 1 минуту
Croessmah, Липпман 5-е издание 3.5.3 Указатели и массивы
0
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
19.02.2020, 09:14
Ну точно. Вот цитат из оригинала:
In particular, as we’ll see, when we use an array, the compiler ordinarily converts the array to a pointer.
coverts - это не заменяет, а преобразует.
2
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
19.02.2020, 09:16  [ТС]
DrOffset, ладно, но что с примером, я же беру & адресс int(*p) [20] указателя, чем это не адресс указателя?
0
Неэпический
 Аватар для Croessmah
18150 / 10732 / 2067
Регистрация: 27.09.2012
Сообщений: 27,047
Записей в блоге: 1
19.02.2020, 09:17
Цитата Сообщение от ReYalp Посмотреть сообщение
&arr даст int (*p) [10]?
Нет. arr имеет тип int[10][20], значит указатель на него имеет тип int(*)[10][20].
arr неявно может быть преобразован в указатель на первый элемент - int(*)[20]
0
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
19.02.2020, 09:19
Цитата Сообщение от ReYalp Посмотреть сообщение
int arr [10][20] - arr даст int (*p) [20], &arr даст int (*p) [10]?
C++
1
2
3
4
5
    int arr [10][20];
    
    int (*p1)[10][20] = &arr;
    
    int (*p2)[20] = arr;
Добавлено через 1 минуту
Цитата Сообщение от ReYalp Посмотреть сообщение
ладно, но что с примером, я же беру & адресс int(*p) [20] указателя, чем это не адресс указателя?
В вашем примере нет указателей. Есть объект типа "массив", адрес которого вы берете.
Адрес указателя был бы, если бы вы брали адрес у объекта типа "указатель".
0
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
19.02.2020, 09:23  [ТС]
DrOffset, теперь все более менее стало на свои места, адреса у них одинаковые потому указывают они оба неявно преобразовываются в &arr[0][0]?
0
Неэпический
 Аватар для Croessmah
18150 / 10732 / 2067
Регистрация: 27.09.2012
Сообщений: 27,047
Записей в блоге: 1
19.02.2020, 09:27
Цитата Сообщение от DrOffset Посмотреть сообщение
In particular, as we’ll see, when we use an array, the compiler ordinarily converts the array to a pointer.
А чуть ниже?
1
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
19.02.2020, 09:32
Цитата Сообщение от ReYalp Посмотреть сообщение
Вы сами раньщ писали что arr неявно становится указателем
Это про этот пост?
Цитата Сообщение от DrOffset Посмотреть сообщение
ReYalp, ну вот.
Операция индексации всегда содержит адресную арифметику, потому что
C++
1
arr[1] // *(arr + 1)
таким образом, если вы просто используете индексацию в двумерном массиве, то вы всегда имеете дело с указателями на массив.
C++
1
arr[1][2] // *(*(arr + 1) + 2)
где
arr + 1 даст double(*)[20]
*(arr + 1) даст double[20]
*(arr + 1) + 2 даст double *
*(*(arr + 1) + 2) даст double,
Где я писал, что он именно становится? )
Вы не понимаете, что значит "преобразуется"? Представьте, что везде, где это требуется, у нас есть неявный вызов функции. Т.е.
C++
1
arr[1][2] // *(convert_to_pointer( *(convert_to_pointer( arr ) ) + 1) + 2)
Так понятнее?
Понятно, что arr никак не меняется. Это неявный аргумент неявной функции преобразования, которую выполняет компилятор.
Правила преобразования описаны в стандарте языка:
An lvalue or rvalue of type “array of N T” or “array of unknown bound of T” can be converted to a prvalue of type “pointer to T”.
The temporary materialization conversion ([conv.rval]) is applied.
The result is a pointer to the first element of the array.
https://eel.is/c++draft/conv.array

Добавлено через 2 минуты
Цитата Сообщение от ReYalp Посмотреть сообщение
теперь все более менее стало на свои места, адреса у них одинаковые потому указывают они оба неявно преобразовываются в &arr[0][0]?
Конечно нет. Адреса одинаковые, потому что они оба указывают на одну и ту же память.
Все примеры, что я вам давал выше вы не разбирали, не запускали, не экспериментировали и не думали?
В общем я предлагаю вам перестать пока тут спрашивать и уже позаниматься практикой.
Иначе никакого терпения отвечать по 10 раз на одно и то же ни у кого не хватит.
0
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
19.02.2020, 09:35  [ТС]
DrOffset, самый запутанный для меня момент - cout << arr, что выводит cout? &arr[0][0]? &arr? Или int (*) [10][20] что собственно тоже самое
0
Неэпический
 Аватар для Croessmah
18150 / 10732 / 2067
Регистрация: 27.09.2012
Сообщений: 27,047
Записей в блоге: 1
19.02.2020, 09:39
Цитата Сообщение от DrOffset Посмотреть сообщение
Вот цитат из оригинала:
Цитата Сообщение от Croessmah Посмотреть сообщение
А чуть ниже?
А чуть ниже так
However,arrays have a special property—in most places when we use an array, the compiler automatically substitutes a pointer to the first element
0
19.02.2020, 09:40

Не по теме:

Цитата Сообщение от Croessmah Посмотреть сообщение
А чуть ниже?
Да, ниже там есть это упрощение и в оригинале.
Переводчик реабилитирован.
:)

0
Неэпический
 Аватар для Croessmah
18150 / 10732 / 2067
Регистрация: 27.09.2012
Сообщений: 27,047
Записей в блоге: 1
19.02.2020, 09:45
Цитата Сообщение от ReYalp Посмотреть сообщение
самый запутанный для меня момент - cout << arr, что выводит cout?
Давай сначала без cout.
C++
1
2
3
4
5
void foo(void * p);
//...
int arr[10][20];
//...
foo(arr);//Что уйдет в foo?
0
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
19.02.2020, 09:45
Цитата Сообщение от ReYalp Посмотреть сообщение
самый запутанный для меня момент - cout << arr, что выводит cout? &arr[0][0]? &arr? Или int (*) [10][20] что собственно тоже самое
C++
1
std::cout << arr;
это во что:
C++
1
std::operator<<(std::cout, arr);
operator<< в данномслучае подходит только один
вот такой:
C++
1
operator(std::ostream & out, void * ptr);
итого имеем два преобразования за раз в этом вызове
т.е.
C++
1
std::operator<<(std::cout, convert_pointer_to_void_pointer( convert_array_to_pointer(arr) ) )
convert_array_to_pointer для примера из 70 поста даст int (*)[20]
а convert_pointer_to_void_pointer даст void *
0
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
19.02.2020, 09:46  [ТС]
DrOffset, так что выводит cout << arr? неявно кастит в int (*) [20],или просто выводит адресс? Тогда адресс чего он выводит? Первого элемента в массиве?
0
Неэпический
 Аватар для Croessmah
18150 / 10732 / 2067
Регистрация: 27.09.2012
Сообщений: 27,047
Записей в блоге: 1
19.02.2020, 09:46
Цитата Сообщение от Croessmah Посмотреть сообщение
Давай сначала без cout
Ладно, отбой, DrOffset уже написал. )
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
19.02.2020, 09:46

Указатель на ссылку или что это такое?
void add(char aData, Branch *&amp;aBranch); Речь об аргументе aBranch. Как это понимать? Указатель на ссылку? Не понятно. Вроде такое не...

Что такое указатель и с чем его есть
Я уже не знаю что делать, но в книжке очень непонятно написано про указатели. Не могли бы вы объяснить что такое указатели и зачем они. И...

Что такое указатель на массив и как им пользоваться?
Всем привет! Нужна информация по сабжу, как объявлять, и что вообще представляет собой(указатель на первый элемент массива, а может на...

Что такое указатель?
Указатель - это переменная, которая в хранит качестве своего значения адрес байта памяти. Что значит адрес байта памяти? К примеру...

Что быстрее использовать, массив э-в, или указатель на массив э-в?
уважаемые, что быстрее использовать, массив э-в, или указатель на массив э-в? или без разницы? С одной стороны обращается все к той же...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
80
Ответ Создать тему
Новые блоги и статьи
Родители токсичные абьюзеры по отношению к своим детям ругают их оскорбляют не любят
zorxor 08.11.2026
Жить в атмосфере постоянных оскорблений, критики и холодности со стороны родителей — это тяжелое и болезненное испытание, которое оставляет глубокие эмоциональные раны. Токсичное и абьюзивное. . .
Как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Ответ от Джемени ИИ.
zorxor 08.11.2026
Джемени, как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Многие люди, возвращаясь домой, сразу переодеваются в максимально свободную одежду или вовсе предпочитают. . .
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
Проверка полного ФИО в типовом справочнике
Maks 07.11.2026
Решение реализовано в конфигурации КА2, на примере справочника "КонтактныеЛицаПартнеров". Задача: Запрет инициалов. Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . . Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
Красочные поля с номером страницы svg+background-image
russiannick 04.11.2026
Красочные поля с номером страницы не менее важны чем в эпоху бумажных книг. Посему спешу представить почтеннейшей публике этот важный инструмент который эти поля и формирует. В процессе разработки. . .
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
Генератор паролей (вариант №4)
Maks 01.11.2026
После публикации 3-го варианта генератора паролей, разослал его своим коллегам (с целью оценки), в итоге были получены следующие рекомендации: 1. Вернуть возможность использования знаков | 1 l I;. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru