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

Объяснить, что делает операция *& и чем она отличается от простого указателя?

09.05.2016, 11:05. Показов 2983. Ответов 34
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Пожалуйста объясните что делает этот оператор...чем он отличается от простого указателя?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
09.05.2016, 11:05
Ответы с готовыми решениями:

Игра морской бой.Можете объяснить операцию case что она делает ?И что означает переменная m3,m2,m1, и переменная z?
Листинг программы: var Form1: TForm1; i,j,g,x1,y1,k11,k21, k33,k32,k31,m3,m2,m1, //кол-во 3х 2х 1х кораблей m,n,z:integer; rot,...

что такого в FT232 или чем она отличается?
Хочу себе взять USB-UART преходник. Всегда думал, что он именно на схемах из семейства FT232. Посмотрел в интернет нигазине, и нашел...

Чем ссылка отличается от указателя?
чем ссылка отличается от указателя?

34
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
09.05.2016, 15:12
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Toshkarik Посмотреть сообщение
Если же сравнивать p и ptr, то в обоих случаях значения будут одинаковыми.
Он уже Вас запутал. Если сравнивать :
p и ptr - разные
&p и &ptr - разные
*p и *ptr разные. //переданный не изменится вне функции
Или я ничего не понял из диалога.
1
 Аватар для Toshkarik
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
09.05.2016, 15:13
так и есть, запутал. Но код выше должен показать, что я хотел сказать.
1
Заблокирован
09.05.2016, 17:10
Цитата Сообщение от Toshkarik Посмотреть сообщение
Если же сравнивать p и ptr, то в обоих случаях значения будут одинаковыми.
- Вы опять неправду пишете. Случаи:
1) p остается в глобальном скоупе, ptr меняется;
2) p - в глобальном скоупе, но при изменении ptr, p меняется точно также, как будто это один указатель, а может это и есть один указатель?

Добавлено через 4 минуты
Цитата Сообщение от Toshkarik Посмотреть сообщение
Programmist5, Вы сравнивали p и ptr? Так это не правильно, нужно сравнивать ( &p и &ptr ).
- кстати если здесь говорится про указатели второго уровня, то это отдельная тема. В них все легко, ну в общем Интернете можно найти информацию.
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13233 / 6865 / 1827
Регистрация: 18.10.2014
Сообщений: 17,398
09.05.2016, 17:13
Цитата Сообщение от Raketa Посмотреть сообщение
C++
1
int AddElement2(CTreeElement *&el,string word)
В этом коде нет никакого "оператора *&". Единственное место, в котором встречается комбинация *& - процитировано выше. Однако это не "оператор", а просто синтаксический элемент объявления ссылки на указатель.

Добавлено через 2 минуты
Цитата Сообщение от Programmist5 Посмотреть сообщение
А, Toshkarik, это типа если написать *&, то остается связь между локальной переменной в функции и глобальной переменной в программе?
Да, именно так. Только "глобальность" тут ни при чем. Остается связь между параметром внутри функции и аргументом в вызывающем коде.
0
Заблокирован
09.05.2016, 17:55
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Да, именно так. Только "глобальность" тут ни при чем. Остается связь между параметром внутри функции и аргументом в вызывающем коде.
- ну наконец-то услышал я слова согласия. Только этот параметр и есть одно и тоже число. Я понял, что спор тут ниочем. Toshkarik мы оба правы, только рассматриваем вопрос с разных сторон. Нужно было соглашаться со мной, а не спорить. Не было бы спора - не было бы путаницы.

Добавлено через 6 минут
Цитата Сообщение от IGPIGP Посмотреть сообщение
Он уже Вас запутал. Если сравнивать :
p и ptr - разные
&p и &ptr - разные
*p и *ptr разные. //переданный не изменится вне функции
- просто втупую так сравнивать нельзя. В разных случаях будут разные результаты. Смотрите мои сообщения выше.
Это не я запутал, а создатель С запутал. Си вообще сложный язык и противоречивый, кстати. Ну ищите крайнего съездите в Америку, поищите там создателя Си.

Добавлено через 5 минут
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
В этом коде нет никакого "оператора *&". Единственное место, в котором встречается комбинация *& - процитировано выше. Однако это не "оператор", а просто синтаксический элемент объявления ссылки на указатель.
- я понимаю это не так. * говорит о передаче указателя. & говорит о том, что нужно создать точно такую же переменную. p и ptr имеют теже самые адреса и значения, то есть это как будто одно и тоже число, только с 2-мя именами.
0
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
09.05.2016, 18:04
Цитата Сообщение от Programmist5 Посмотреть сообщение
- я понимаю это не так.
Важно не как понимаете Вы, важно как понимает компилятор.

Не по теме:

Цитата Сообщение от Programmist5 Посмотреть сообщение
Си вообще сложный язык
Сложный не язык. Такие заявления делают только в том случае, если в голове бардак.

0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13233 / 6865 / 1827
Регистрация: 18.10.2014
Сообщений: 17,398
09.05.2016, 18:06
Цитата Сообщение от Programmist5 Посмотреть сообщение
- я понимаю это не так. * говорит о передаче указателя. & говорит о том, что нужно создать точно такую же переменную. p и ptr имеют теже самые адреса и значения, то есть это как будто одно и тоже число, только с 2-мя именами.
Понимать это можно по-разному.

Однако с точки зрения формального языка С++, этот параметр - это ссылка привязанная к передаваемому вами аргументу. Ссылка и объект, которому она привязана - это две отдельные сущности и в языке есть свойства, позволяющие эти сущности отличать друг от друга.

Но в "среднестатистическом" контексте, если не вдаваться в тонкости, можно действительно считать, что ссылка - это просто другое имя для той же самой переменной.

Добавлено через 38 секунд
Цитата Сообщение от Programmist5 Посмотреть сообщение
Си вообще сложный язык
А Си то тут при чем?
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
09.05.2016, 18:56
Цитата Сообщение от Programmist5 Посмотреть сообщение
- просто втупую так сравнивать нельзя. В разных случаях будут разные результаты. Смотрите мои сообщения выше.
Вот место выше из которого растут ноги (кривые):
Объяснить, что делает операция *& и чем она отличается от простого указателя?
а именно фраза в ответ на:
Цитата Сообщение от Toshkarik Посмотреть сообщение
Programmist5, нет, в первом случае Вы передаете копию указателя. Во втором ссылку на него.
Цитата Сообщение от Programmist5 Посмотреть сообщение
вот это не правильно, ptr и p имеют одинаковый адрес, т.е. это одно и то же. По-крайней мере у меня в C++Builder 6 так.
То есть, Вы не то что бы не понимаете, что ссылка и её объект имеют один и тот же адрес/размер и пр. Более того, ссылка не имея собственного объекта как раз и ссылается на объект для которого объявлена. Вы этого просто не знаете и уверены в своей правоте. Которая ничем не обоснована.
Участвовать в данной теме больше не считаю нужным. Почитайте хотя бы самые базовые вещи перед тем как спорить.
0
Заблокирован
09.05.2016, 20:10
Цитата Сообщение от daslex Посмотреть сообщение
Сложный не язык. Такие заявления делают только в том случае, если в голове бардак.
- хорошо, найди мне сайт который описывает оператор & в данном контексте.

Добавлено через 6 минут
Цитата Сообщение от IGPIGP Посмотреть сообщение
То есть, Вы не то что бы не понимаете, что ссылка и её объект имеют один и тот же адрес/размер и пр. Более того, ссылка не имея собственного объекта как раз и ссылается на объект для которого объявлена. Вы этого просто не знаете и уверены в своей правоте. Которая ничем не обоснована.
Участвовать в данной теме больше не считаю нужным. Почитайте хотя бы самые базовые вещи перед тем как спорить.
- не нужно оскорблять меня, я знаю базовые вещи, а то я щас тебя сам отправлю учиться. Точно помню, что во втором случае p и ptr имели абсолютно одинаковые адреса. А то, что вы приводиет эту цитату:
Цитата Сообщение от IGPIGP Посмотреть сообщение
Programmist5, нет, в первом случае Вы передаете копию указателя. Во втором ссылку на него.
- которую сказал Toshkarik. Во втором случае НЕ делается ссылка на указатель, т.е. не делается указатель 2-го уровня, их вообще здесь нет. Создается второе имя(ptr) той же переменной(p).
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13233 / 6865 / 1827
Регистрация: 18.10.2014
Сообщений: 17,398
09.05.2016, 20:34
Цитата Сообщение от Programmist5 Посмотреть сообщение
Во втором случае НЕ делается ссылка на указатель, т.е. не делается указатель 2-го уровня, их вообще здесь нет. Создается второе имя(ptr) той же переменной(p).
Это уже какая-то каша из теоретических концепций и практических реализаций. Вы уже определитесь, о чем вы говорите.

Думать о ссылке, как о "втором имени той же переменой" можно, но только в теоретическом контексте.

На практике же для того, чтобы реализовать обычную функцию, которая может принимать ссылки на разные переменные из вызывающего кода, ссылка реализуется именно как обычный "замаскированный" указатель, т.е. в традиционной реализации за параметром-ссылкой в данном случае скрывается именно двухуровневый указатель.

А уж как вам больше нравится "думать" о ссылках: как о втором имени для переменной или как о замаскированном указателе - это ваше личное дело. К тому же эта два варианта никак друг друга не исключают, поэтому спорить тут не о чем.
2
Заблокирован
09.05.2016, 20:39
Спорить тут не о чем, это точно. Я понял p и ptr - это указатели одного и того же 1-го уровня(см. 2-й случай). Слава Богу, спор закончился, но теоретические сведения по поводу символа & в данном контексте можешь мне выслать drislex.
0
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
09.05.2016, 20:45
Цитата Сообщение от Programmist5 Посмотреть сообщение
- хорошо, найди мне сайт который описывает оператор & в данном контексте.
Во всех контекстах языка C++ - это ссылка на указатель.

На вопрос:
Цитата Сообщение от Programmist5 Посмотреть сообщение
Если честно не понял разницы между:
Я Вам примел привёл, Вы его не увидели?

Я не знаю о чём Вы спорите. Я не знаю чего Вы ещё хотите.
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
09.05.2016, 20:50
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Думать о ссылке, как о "втором имени той же переменой" можно, но только в теоретическом контексте.
Налицо путаница между ссылкой в скоупе объявления и ссылке как параметре функции. В первом случае ссылка это синоним, с возможно суженными правами. А при объявлении параметра ссылки никакой ссылки вообще нет. В этом случае меняется соглашение о том как передаётся переменная. А реализация уже выполняет контракт и обычно через скрытый указатель.
Цитата Сообщение от Programmist5 Посмотреть сообщение
Точно помню, что во втором случае p и ptr имели абсолютно одинаковые адреса.
Они и имеют. Я это и имел ввиду. Это потому что в функции создана ссылка которая ссылается аж прямо на ту переменную на которую ссылается. Это и говорит о том что это переменная и ссылка на неё.
TheCalligrapher, как раз и говорит, что реализовывать такое поведение приходится при помощи указателя. Код функции не может знать ничего о той области стека из которой он вызывается и переменные оттуда либо копируются либо передаются адресно. Оскорблений в ваш адрес с моей стороны не было и тыкать мне больше не нужно. Всего доброго.
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13233 / 6865 / 1827
Регистрация: 18.10.2014
Сообщений: 17,398
09.05.2016, 23:49
Цитата Сообщение от IGPIGP Посмотреть сообщение
Налицо путаница между ссылкой в скоупе объявления и ссылке как параметре функции. В первом случае ссылка это синоним, с возможно суженными правами. А при объявлении параметра ссылки никакой ссылки вообще нет. В этом случае меняется соглашение о том как передаётся переменная. А реализация уже выполняет контракт и обычно через скрытый указатель.
Не совсем понимаю, в чем ценность утверждения "никакой ссылки вообще нет". Почему нет? С точки зрения языка, нет никакого разницы между ссылками, где бы они ни были объявлены: в локальном scope, в списке параметров функции, среди полей класса.

Зачем вводить какие-то разделение между этими контекстами? Что это дает?
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
10.05.2016, 01:14
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Не совсем понимаю, в чем ценность утверждения "никакой ссылки вообще нет".
Сейчас попробую объяснить, что я имел ввиду. Когда в функции объявлен формальный параметр типа T, то это значит, что функция ожидает объект типа Т или типа, который неявно приводится к..., что в данном контексте одно и то же. Ссылка отличается от обычных типов тем, что там, где объявлено T & вовсе не ожидается ссылка на T (хотя её можно туда передать)), а в большинстве случаев ожидается именно объект типа T. Как уж это реализуется, через указатель ли, через резервирование в статической памяти (безумие) места для глобальных объектов не суть. Важно, что данное объявление меняет контракт.
Дело в том, что с моей точки зрения, инициализация ссылки, - формального параметра внешней переменной не логична. Почему это мы в новой рабочей области, инициализируем ссылку объектом из зоны вызова, а не его копией? Тут имеет место именно соглашение, а атрибутика ссылки только запутывает. Если бы формальный параметр объявлялся как-нибудь T# и называлось это передачей по происхождению (), это работало бы ничуть не хуже и не могло бы быть спутано с ссылкой в пределах одной области, для которой осталось бы T &.
Всё сказанное более чем спорно, но я имел ввиду именно это. Объявление ссылки в области, - объявление синонима, а объявление ссылки формальным параметром не означает, что передавать нужно именно ссылку. В этом смысле там нет требования передавать ссылку. У других типов есть требование передавать тип. В этом смысле, опять же, объявление переменной (не ссылочной) в области и в качестве параметра, наоборот, - родственны и по виду и по действию.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.05.2016, 01:14

Чем оператор || отличается от оператора && ?
Приведите простые примеры, никак до мозгов не доходит)

Почему используется *& вместо простого указателя и как это работает?
может кто-нибудь объяснить почему используется *& вместо простого указателя и как это работает? конкретно у метода D class proizvodcl :...

Что делает эта строчка: ++x && ++y || ++z; ?
Что делает эта строчка? ++x && ++y || ++z;

Определить, что делает программа, сколько значений х она выводит и в чем особенности двух последних значений
2.Определить, что делает программа, сколько значений х она выводит и в чем особенности двух последних значений. x=1; while...

Чем отличается указатель на массив от обычного указателя?
Чем отличается указатель на массив от обычного указателя?


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

Или воспользуйтесь поиском по форуму:
35
Ответ Создать тему
Новые блоги и статьи
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
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 и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru