810 / 405 / 83
Регистрация: 10.06.2014
Сообщений: 2,524
|
||||||
1 | ||||||
Указатель на ссылку или что это такое?10.03.2017, 11:44. Показов 26839. Ответов 34
Метки нет Все метки)
(
Как это понимать? Указатель на ссылку? Не понятно. Вроде такое не имеет смысла Или это своего рода упрощенное использование указателя на указатель? Прошу объяснить Добавлено через 6 минут На СИшном компиляторе не компилится... Значит плюсовая фича Но чего оно делает?
0
|
|
10.03.2017, 11:44 | |
Ответы с готовыми решениями:
34
Как получить ссылку на указатель или указатель на указатель в массиве? Нюансы синтаксиса: запись double *array - это указатель или что-то иное? Что такое хэндлер файла? Что такое файловый указатель? Указатель на ссылку: как это использовать ? |
47 / 28 / 12
Регистрация: 23.01.2013
Сообщений: 125
|
|
10.03.2017, 12:26 | 2 |
Указателя на ссылку не может быть. А это ссылка на указатель.
В СИ нет ссылок, по этому не компилится,
1
|
![]() 5865 / 4742 / 2940
Регистрация: 20.04.2015
Сообщений: 8,361
|
||||||
10.03.2017, 12:27 | 3 | |||||
Это объявление функции, первым параметром принимающей ссылку на указатель.
1
|
810 / 405 / 83
Регистрация: 10.06.2014
Сообщений: 2,524
|
|
10.03.2017, 12:40 [ТС] | 4 |
Даценд, greenlight,
Как я понял это может пригодится вместо использования указателя на указатель? Можно передать ссылку на указатель и тогда внутри функции не будет создана локальная копия указателя и все изменения внутри функции будут отражены на внешнем указателе который передался как аргумент этой функции Ну так удобнее просто Я прав?
0
|
47 / 28 / 12
Регистрация: 23.01.2013
Сообщений: 125
|
||||||
10.03.2017, 12:49 | 5 | |||||
Да. Можешь обнулять указатели например.
1
|
810 / 405 / 83
Регистрация: 10.06.2014
Сообщений: 2,524
|
|
10.03.2017, 12:53 [ТС] | 6 |
greenlight,
Крутая фича ![]() greenlight, Даценд, Спасибо! ![]() Добавлено через 2 минуты А потом еще и разыменовывать указатель на указатель чтоб достучаться до адреса который нужен...
0
|
20 / 27 / 1
Регистрация: 14.03.2015
Сообщений: 792
|
|
10.03.2017, 14:05 | 7 |
Даценд, этот код выводит что-то не понятное
100 1592020704
0
|
![]() 5865 / 4742 / 2940
Регистрация: 20.04.2015
Сообщений: 8,361
|
||||||
10.03.2017, 15:26 | 9 | |||||
gogaloh, GbaLog-,
Да. ![]() Странно, почему в CodeBlocks все работало? А вот если и второй параметр передавать по ссылке, тогда будет правильно:
0
|
![]() 5865 / 4742 / 2940
Регистрация: 20.04.2015
Сообщений: 8,361
|
|
10.03.2017, 16:02 | 11 |
0
|
Неэпический
|
|
10.03.2017, 16:10 | 12 |
Память она такая - хранит то, что в неё записали.
Не важно кто и когда. ![]() Вышли из функции - кадр стека уничтожился, память свободна. Следующий вызов любой функции, например, может перезаписать данный участок.
1
|
17423 / 9256 / 2263
Регистрация: 30.01.2014
Сообщений: 16,208
|
|
10.03.2017, 16:17 | 13 |
UB в программе тем и страшно, что с ним до поры до времени может все работать. Поговорка же есть такая "правильно работающая программа - частный случай неопределенного поведения". Пока не сменится версия компилятора, или настройки оптимизации, или просто добавится код, который поменяет поведение с позитивного на негативное...
1
|
Неэпический
|
||||||
10.03.2017, 16:18 | 14 | |||||
0
|
42 / 42 / 17
Регистрация: 25.04.2014
Сообщений: 499
|
|
10.03.2017, 16:51 | 15 |
1
|
810 / 405 / 83
Регистрация: 10.06.2014
Сообщений: 2,524
|
|
10.03.2017, 17:03 [ТС] | 16 |
tapochka,
Уже разобрался, спасибо ![]()
0
|
0 / 0 / 0
Регистрация: 26.04.2017
Сообщений: 37
|
||||||||||||||||||||||||||
23.12.2018, 13:48 | 17 | |||||||||||||||||||||||||
Подскажите пожалуйста
И еще вопрос, действительно ли то что для указателя на char выделяется отдельный адрес под "всю строку"(типа это же еще и адрес указателя) который принимает
Иначе как можно объяснить тот факт что когда
0
|
17423 / 9256 / 2263
Регистрация: 30.01.2014
Сообщений: 16,208
|
|
23.12.2018, 14:35 | 18 |
Это объясняется перегрузкой оператор << для разных типов. Для перегрузки
operator<<(std::ostream &, char c) выводится 1 символ (cout << *a; , где *a - это char ). Для перегрузки operator<<(std::ostream &, char const * p) выводятся все символы в последовательности (cout << a; , где a - это массив char[N] , приведенный к char const * в при передаче в функцию), ограничением который выступает байт со значением 0.
1
|
0 / 0 / 0
Регистрация: 26.04.2017
Сообщений: 37
|
|
23.12.2018, 15:14 | 19 |
Этот момент понял, спасибо, а первый аргумент откуда получает? "std::ostream &" ? operator<<(std::ostream &, char const * p)
А на счет "cout << &*a" как обстоят дела? "&*" игнорируется компилятором и отправляется только "a"? а зачем тогда такая конструкция вообще "&*"?
0
|
17423 / 9256 / 2263
Регистрация: 30.01.2014
Сообщений: 16,208
|
|
23.12.2018, 15:42 | 20 |
Первый аргумент - это
std::cout . Запись std::cout << a; - это синтаксический сахар для вот такого вызова operator<<(std::cout, a); .В случае, если мы говорим о встроенных версиях * и & (т.е. об отсутствии их перегрузок) компилятор не порождает дополнительных инструкций для такой записи. Т.е. да, в вашем случае это эквивалентно. В обобщенных алгоритмах, например при работе с итераторами, эта запись поможет вытащить настоящий адрес элемента. Там это важно как раз из-за возможной перегрузки operator* и\или operator& .
1
|
23.12.2018, 15:42 | |
Помогаю со студенческими работами здесь
20
как такое правильно писать? это ссылка на указатель? Что такое указатель на член класса?
Что такое указатель и с чем его есть Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |