Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Игорюня
20 / 16 / 11
Регистрация: 07.12.2013
Сообщений: 244
1

Ссылки и указатели на функцию

25.03.2014, 12:15. Просмотров 429. Ответов 12
Метки нет (Все метки)

Если передавать значение в функцию через указатель и ссылку,то в обоих случаях передаётся адрес,а не значение?

И ещё:

C++
1
2
3
4
5
int * function1(int a)
{
a=10;
return a;
}
C++
1
2
3
4
5
int * function2(int a)
{
a=10;
return & a;
}
Почему первая функция верна,хотя вроде бы нужно указывать оператор адресации?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.03.2014, 12:15
Ответы с готовыми решениями:

Передача в функцию - ссылки, указатели, константы
Вот программа: #include <iostream> void fun(int &rhs) { rhs++; } ...

Как лучше передавать значения в функцию? Ссылки vs указатели
Всем доброго времени суток. Уважаемые гуру, подскажите пожалуйста, как лучше...

Ссылки или указатели (Написать функцию , которая вычисляет гипотенузу, площадь и периметр прямоугольного треугольника)
Написать функцию , которая вычисляет гипотенузу(корень квадратный из суммы...

Ссылки, указатели
Доброго времени. Как, используя ссылки, указатели и, возможно, другие приемы...

Ссылки и указатели
Добрый день. Возможно было. В чем существенная разница между передачей данных...

12
ValeryS
Модератор
7372 / 5573 / 707
Регистрация: 14.02.2011
Сообщений: 18,942
25.03.2014, 12:18 2
Цитата Сообщение от Игорюня Посмотреть сообщение
Почему первая функция верна,
она не верна
просто размер указателя и размер int совпадают
в результате она вернет указатель на адрес 10
а что там лежит, кто знает
0
aLarman
646 / 567 / 164
Регистрация: 13.12.2012
Сообщений: 2,123
Завершенные тесты: 2
25.03.2014, 12:19 3
Цитата Сообщение от Игорюня Посмотреть сообщение
Почему первая функция верна,хотя вроде бы нужно указывать оператор адресации?
видимо происходит неявное преобразование из int в указатель на int
0
ValeryS
Модератор
7372 / 5573 / 707
Регистрация: 14.02.2011
Сообщений: 18,942
25.03.2014, 12:20 4
да и вторая не верна
возвращаешь адрес локальной переменной, к чему это приведет ? неизвестно
0
Vourhey
Почетный модератор
6493 / 2268 / 185
Регистрация: 29.07.2006
Сообщений: 12,534
25.03.2014, 12:21 5
Цитата Сообщение от Игорюня Посмотреть сообщение
то в обоих случаях передаётся адрес,а не значение?
да
Цитата Сообщение от Игорюня Посмотреть сообщение
Почему первая функция верна
Что значит "функция верна"? Сформулируй мысль.
1
Игорюня
20 / 16 / 11
Регистрация: 07.12.2013
Сообщений: 244
25.03.2014, 12:24  [ТС] 6
На неё компилятор не ругается и в книге есть аналог.
0
Vourhey
Почетный модератор
6493 / 2268 / 185
Регистрация: 29.07.2006
Сообщений: 12,534
25.03.2014, 12:28 7
Цитата Сообщение от Игорюня Посмотреть сообщение
На неё компилятор не ругается
Задай ему правильные опции - должен заругаться.
0
ValeryS
Модератор
7372 / 5573 / 707
Регистрация: 14.02.2011
Сообщений: 18,942
25.03.2014, 12:30 8
Цитата Сообщение от Игорюня Посмотреть сообщение
На неё компилятор не ругается
есть много на что компилятор не ругается, но ведет себя не так как надо
Цитата Сообщение от Игорюня Посмотреть сообщение
книге есть аналог.
что за книга? дословно цитату
0
Игорюня
20 / 16 / 11
Регистрация: 07.12.2013
Сообщений: 244
25.03.2014, 13:39  [ТС] 9
C++
1
2
3
4
5
int * function(int * a)
{
    *a=10;
    return  a;
}
Затупил.Функция приняла указатель поэтому адресация не нужна.Не придал значения по началу.

Добавлено через 1 час 6 минут
Vourhey, а адреса как и значения помещаются в стеки при передачи в функцию?
0
ValeryS
Модератор
7372 / 5573 / 707
Регистрация: 14.02.2011
Сообщений: 18,942
25.03.2014, 13:42 10
Цитата Сообщение от Игорюня Посмотреть сообщение
Vourhey, а адреса как и значения помещаются в стеки при передачи в функцию?
и да и нет
помешаются в стек, но техника несколько другая
это же тоже аргументы
вообще не правильно говорить в стек, правильно в автоматическую память, некоторые компиляторы, при определенных условиях, загоняют аргументы не в стек а в регистры
0
Игорюня
20 / 16 / 11
Регистрация: 07.12.2013
Сообщений: 244
25.03.2014, 13:52  [ТС] 11
Просто пытаюсь понять,каким образом экономится память при передаче через адрес.Я имею ввиду функции принимающие и возвращающие стандартные,а не пользовательские типы,где используется копировщик и деструктор при передаче и возвращении как значение.
0
ValeryS
Модератор
7372 / 5573 / 707
Регистрация: 14.02.2011
Сообщений: 18,942
25.03.2014, 13:55 12
Цитата Сообщение от Игорюня Посмотреть сообщение
Просто пытаюсь понять,каким образом экономится память при передаче через адрес.
в общем случае никак
экономится только если передавать большие блоки( например структуры),где указатель меньше данных, а например при передаче char даже может увеличится
главное при передаче через указатели или ссылки, что работаешь с самой переменной, а не с копией
0
mustimur
315 / 222 / 72
Регистрация: 22.11.2013
Сообщений: 841
Записей в блоге: 1
25.03.2014, 13:59 13
Игорюня, Не увлекайтесь этим понапрасну, а вообще зайдите вот сюда http://www.cyberforum.ru/blogs/78200/blog2120.html
0
25.03.2014, 13:59
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.03.2014, 13:59

Указатели и Ссылки
извеняюсь,но никак не могу понять. int sum(int* inLeft, int* inRight) { ...

Указатели и ссылки
Используя вместо самой переменной указатель на нее написать программу в...

Ссылки и указатели
Всем привет. Совсем запутался с ссылками и указателями. Помогите решать...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru