|
4 / 4 / 1
Регистрация: 16.09.2012
Сообщений: 119
|
|
Передача данных по значению и по ссылке18.09.2012, 21:57. Показов 55906. Ответов 32
Метки нет (Все метки)
Всем привет!
Помогите плз разобраться в передаче данных в качестве параметров функции. *var и &var в чем между ними разница, когда мы их передаем в качестве параметров функции? Заранее спс за хелп!
0
|
|
| 18.09.2012, 21:57 | |
|
Ответы с готовыми решениями:
32
С - > C# Передача значений по ссылке и значению
|
|
2393 / 1913 / 763
Регистрация: 27.07.2012
Сообщений: 5,553
|
||||||
| 18.09.2012, 22:24 | ||||||
|
Ссылка - это по сути второе имя того же самого объекта. Когда в функцию передаётся объект по ссылке, то передаётся фактически этот объект. Когда же мы передаём объект по значению, то в функцию передаётся его копия.
Допустим, есть такой код:
3
|
||||||
|
4 / 4 / 1
Регистрация: 16.09.2012
Сообщений: 119
|
|
| 18.09.2012, 22:25 [ТС] | |
|
С этим то понятно...
А что если мы напишем (int *parametr)?
0
|
|
|
87 / 87 / 1
Регистрация: 19.06.2012
Сообщений: 245
|
||
| 18.09.2012, 22:35 | ||
|
А вообще, по ссылке я считаю предпочтительнее. Оно скрывает реализацию (что на самом деле там генерится код с указателем), да и вызывающей стороне обычно(не всегда) меньше мороки, да и это какбы более c++ - way
1
|
||
|
2393 / 1913 / 763
Регистрация: 27.07.2012
Сообщений: 5,553
|
|||||||
| 18.09.2012, 22:37 | |||||||
|
Работают указатели примерно так:
3
|
|||||||
|
clickera
|
|||||||||||
| 25.04.2013, 02:24 | |||||||||||
|
Здраствуйте. Аналогична ситуация. С указателями никак не могу разобратся
Есть класс, в котором есть функция которая сравнивает две строки char. Функция
Вот вывод отладки из консоли (красным отметил перевый значение первого аргумента): 1 6 2 --0� -F |
|||||||||||
|
154 / 31 / 11
Регистрация: 29.10.2012
Сообщений: 397
|
|||||||||||
| 04.06.2014, 12:17 | |||||||||||
|
А какой способ более оптимальный в плане использования памяти и скорости?
![]() P.S Хотя я не понимаю, как работает второй вариант. В первом всё понятно, передётся указатель, и изменяется значение по адресу, который хранится в указателе. Ну а как понять второй вариант? Там просто передаётся переменаая, а в функции уже мелькает её адрес... Не понимаю, как это работает. Получается, можно вобще без указателей обходиться, таким образом.
0
|
|||||||||||
|
327 / 230 / 55
Регистрация: 30.05.2014
Сообщений: 682
|
||
| 04.06.2014, 12:22 | ||
|
0
|
||
|
8 / 8 / 4
Регистрация: 23.04.2014
Сообщений: 59
|
|
| 04.06.2014, 12:23 | |
|
вот тут все понятно объяснено
http://www.learncpp.com/cpp-tu... reference/ http://www.learncpp.com/cpp-tu... y-address/
1
|
|
|
154 / 31 / 11
Регистрация: 29.10.2012
Сообщений: 397
|
||||
| 04.06.2014, 12:30 | ||||
|
Добавлено через 5 минут
0
|
||||
|
327 / 230 / 55
Регистрация: 30.05.2014
Сообщений: 682
|
||
| 04.06.2014, 12:43 | ||
|
0
|
||
|
1 / 1 / 1
Регистрация: 29.01.2015
Сообщений: 72
|
|
| 29.01.2015, 13:44 | |
|
Код генерируется одинаковый, эта примочка с передачей по ссылке была сделана для трех целей - 1) упрощение изучения слабыми программистами, которым сложно пользоваться указателями 2) унификация с языками, где нет указателей, и нельзя написать a->b->c->d 3) упрощения переноса части кода, содержащего обращение к методам объектов в функцию - в ней не потребуется заменять точки на ->
А чем пользоваться - дело программиста. Кто перешел с языка С, те пользуются указателями. Кто перешел с Паскаля или Васика, те пользуются передачей по ссылке.
0
|
|
|
710 / 283 / 16
Регистрация: 31.03.2013
Сообщений: 1,340
|
||
| 29.01.2015, 14:28 | ||
|
Проблема указателей в том, что они могут быть 1) нулевые 2) неинициализированные. Этих двух причин более чем достаточно чтобы отказаться от их использования в пользу ссылок во всех случаях, где это возможно.
0
|
||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|||||||||||||
| 29.01.2015, 15:52 | |||||||||||||
Либо когда необходимо предоставить возможность передать аргументы, которые просигнализируют: "если меня нет, используете дефолтное". Такое сплошь и рядом используется в сишном апи: функция может принимать кучу аргументов. Но заполнить достаточно только важные для пользователя. Вместо нулей будут использованы значения по умолчанию.
лучше передавая намерения автора кода. И не требует дополнительных проверок на нуль.
0
|
|||||||||||||
|
1 / 1 / 1
Регистрация: 29.01.2015
Сообщений: 72
|
|||||
| 29.01.2015, 19:10 | |||||
|
Добавлено через 14 минут И еще когда объекты представляют собой иерархию, но не классов, а экземпляров. В таком случае в методы объектов приходится передавать указатели, поскольку в иерархии хранятся они, а не ссылки. Наилучший пример - мощный и развитый мультиплатформенный фреймворк Qt. В нем передача параметров по ссылке почти не используется, а по указателям сплошь и рядом. То есть, именно 1-й вариант - это для тех, кто имеет ниже квалификацию, не умеет грамотно работать с указателями.
0
|
|||||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||||||
| 29.01.2015, 20:08 | ||||||
|
https://www.cyberforum.ru/post5873145.html Если без живого объекта работать нельзя, значит указатель не нужен. Тут по смыслу нужна именно ссылка, и на нуль проверять не придется. Нафига принимать указатель, что бы потом обязательно проверять его на nullptr, а пользователя напрягать: вот прототип принимает указатель, но сюда обязательно нужно живой объект, а не просто адрес. Что до идеологии - не видитесь на авторитеты. Они и шаблоны изначально не осилили. Им показалось проще запилить собственный костыль-препроцессор, нежели осилить boost::function и аналоги для создания технологии слотов/сигналов. Вот и получилось, что кютешные слоты/сигналы - тормозной рантайм. На вскидку они в тысячи раз медленнее работают, чем тот же std::function Хорошая новость в том, что использовать std::function там так же ничего не мешает. -- там где по смыслу требуется работать именно с указателем, работают с указателем. -- там где по смыслу требуется работать с живым объектом , работают с ссылкой, или с объектом по значению (зависит от ситуации) Использования вещи не по назначению: Нужен живой объект. Но мы же не ищем легких путей. Сначала мы сделаем кривой сбивающий с толку прототип, а потом начнем вставлять проверки: а живой ли нам прислали? Вот это уже признак низкой квалификации.
0
|
||||||
|
Неэпический
|
|
| 29.01.2015, 20:15 | |
|
Первый пост: 18.09.2012
Спустя более полугода подняли тему: 25.04.2013 Прошло больше года и снова подняли: 04.06.2014 И теперь еще раз: 28.01.15 Дайте уже умереть этой теме спокойно, некроманты ![]() Добавлено через 20 секунд Первый пост: 18.09.2012 Спустя более полугода подняли тему: 25.04.2013 Прошло больше года и снова подняли: 04.06.2014 И теперь еще раз: 28.01.15 Дайте уже умереть этой теме спокойно, некроманты
0
|
|
|
710 / 283 / 16
Регистрация: 31.03.2013
Сообщений: 1,340
|
|||
| 29.01.2015, 23:33 | |||
|
Весь мир старается любой ценой бороться со сложностью разработки, но мы-то, благодаря Gourmand'у, теперь знаем, что это все ерунда. Решение оказывается простое - надо-то всего лишь никогда не делать ошибок, лол.
0
|
|||
|
1 / 1 / 1
Регистрация: 29.01.2015
Сообщений: 72
|
||||||||
| 30.01.2015, 14:06 | ||||||||
Добавлено через 4 минуты
0
|
||||||||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|||||||
| 30.01.2015, 14:40 | |||||||
|
Но мне бы не хотелось сейчас скатываться в тему кути. Кутя - замичательный фреймворк. И его киллер-фича - это тщательно продуманный дизайн. Имхо: один из лучших в своем роде. Право же - детский сад. Классика жанра:
Зачем вам нужны "мощности указателя", если все что вам нужно в этой конкретной задаче, для этой конкретной функции - это работать с нормальным, живым объектом? ---------------------------------- Я уже просто промолчал о том, что ссылки обладают свойствами, которые в принципе не доступны указателям. Но эти свойства позволяют на с++ проворачивать такие штуки, которые сишникам и не снились. Вообще то как раз таки наоборот. Обращение с ссылкой столь же простое, как и с обычным объектом. Её и нужно воспринимать, как псевдоним оригинального объекта. И код получается таким же простым, как будто бы вы работаете с обычным объектом. В отличи от указателя, который как минимум нужно проверять на нулль, думать о том, нужно ли выделять/чистить память для него, и тд и тп. ------------------------------------------------------------------ Использование указателя там, где по смыслу нужна ссылка - это выдает либо новичка, который ни бум бум, либо сишника, чьи мозги настолько закостенели, что уже просто не в состоянии перестроится на с++ лад.
1
|
|||||||
| 30.01.2015, 14:40 | |
|
Помогаю со студенческими работами здесь
20
Передача параметров по указателю, ссылке и значению Передача объекта по ссылке или о значению Конструкторы копирования, передача по ссылке и значению Передача параметров функции по значению, ссылке и указателю
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|
Фото: Daniel Greenwood
kumehtar 13.11.2025
|
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга,
Ты же видел моря и метели.
Как сменялись короны и стяги,
Как эпохи стрелою летели.
- Этот мир — это крылья и горы,
Снег и пламя, любовь и тревоги,
И бескрайние. . .
|