0 / 0 / 1
Регистрация: 28.02.2015
Сообщений: 65

Передача аргументов в функцию по ссылке и указателю

09.06.2015, 12:42. Показов 993. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Чем отличается передача по ссылке от передачи по указателю аргументов в функцию?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.06.2015, 12:42
Ответы с готовыми решениями:

Передача в функцию по ссылке или указателю
Гуру C++, как предпочтительнее делать?:) void f1(int &a) { a = 5; } void f2(int * a) {

Передача параметров в функцию по значению, по ссылке и по указателю
Доброе время суток товарищи программисты. Столкнулся с кучей ошибок в написании простой программы. Задача заключается в том чтобы написать:...

Передача параметров в функцию по значению, по ссылке или по указателю
Передача параметров в функцию по значению, по ссылке или по указателю. Чем отличаются эти 3 способа. И, если не сложно, привести...

3
68 / 67 / 59
Регистрация: 14.07.2013
Сообщений: 251
09.06.2015, 13:18
Ни чем. И там и там передается адрес

Добавлено через 3 минуты
А такая возможность вам дана чтобы вы могли передавать и переменные созданные в стеке int x; и переменные созданные в дин памяти int *x = new int; Хотя практически любую тривиальную задачу можно решать любым из этих способов
0
2688 / 2260 / 244
Регистрация: 03.07.2012
Сообщений: 8,228
Записей в блоге: 1
09.06.2015, 13:31
Почти ничем, но есть тонкости:
C++
1
2
3
4
5
6
7
void add(int x, int y) {
x+=y;
}
...
int a=2, b=1;
add(a,b); 
cout<<a;// упс - не работает
Изменим:
C++
1
2
3
4
5
6
7
void add(int& x, int& y) {
x+=y;
}
...
int a=2, b=1;
add(a,b); 
cout<<a;// так работает !!!
теперь через указатели
C++
1
2
3
4
5
6
7
void add(int *x, int *y) {
*x+=*y;
}
...
int a=2, b=1;
add(&a,&b); 
cout<<a;// тоже работает !!!
ощущаете разницу?
0
77 / 50 / 16
Регистрация: 17.05.2015
Сообщений: 262
09.06.2015, 14:03
Цитата Сообщение от akaAxeL Посмотреть сообщение
Ни чем. И там и там передается адрес
И все же они отличаются, по своим возможностям.

bkeSevn, смотри, простенький пример, каждый такой может натыкать. Можешь свой пример сделать. Суть - путем "тыка" понять принцип.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#include <iostream>
#include <string>
#include <Windows.h>
 
using namespace std;
 
void fun1(int &a);
void fun2(int *a);
void fun3(int *a);
 
//демонстрация указателей и ссылок
void main() {
    int a = 0;
    int d = 5;
    cout << "  a = '" << a << "'\n";
    cout << "Use fun1(int &a) \n";
    fun1(a);
    cout << "  a = '" << a << "'\n";
 
    int *b;
    b = &d;
    cout << "  *b = '" << *b << "'\n";
    cout << "  d = '" << d << "'\n";
    cout << "Use fun2(int *b) \n";
    fun2(b);
    cout << "  *b = '" << *b << "'\n";
    cout << "  d = '" << d << "'\n";
 
    int *c = new int[10];
    c[5] = 0;
    cout << "  c[5] = '" << c[5] << "'\n";
    cout << "Use fun3(int *c) \n";
    fun3(c);
    cout << "  c[5] = '" << c[5] << "'\n";
 
    cout << endl << "=====\n";
    cout << " a = " << a << endl;
    cout << " &a    = " << &a << endl;
    cout << " a[0]  = ERROR" << endl;
    cout << " &a[0] = ERROR" << endl;
    cout << " *a    = ERROR" << endl;
    cout << " b = " << b << endl;
    cout << " &b    = " << &b << endl;
    cout << " *b    = " << *b << endl;
    cout << " &b[0] = " << &b[0] << endl;
    cout << " b[0]  = " << b[0] << endl;
    cout << " c = " << c << endl;
    cout << " *c    = ERROR" << endl;
    cout << " &c    = " << &c << endl;
    cout << " c[5]  = " << c[5] << endl;
    cout << " &c[5] = " << &c[5] << endl;
    cout << " *c[5] = ERROR" << endl;
    delete[]c;
 
    system("Pause");
}
 
void fun1(int &a) {
    a++;
}
 
void fun2(int *a) {
    a[0]++;
}
 
void fun3(int *a) {
    a[5] = 666;
}
И наверное тебе бросается в глаза такие интересные вещи как... мы не делали массив, но он "Появился?"

Ссылками проще. Ты просто в функции указываешь ссылку, а уже в программе и в самой функции не используешь лишние знаки, которые могут тебя запутать.

C++
1
2
3
4
5
6
7
8
9
10
11
void main() {
   int Param = 10;
   int Bpar = 5;
   fun1(Param, Bpar);
}
 
void fun1(int &a, int &b) {
    /** Что-то делает **/
        b = a;
        a = a * b;
}
Как видишь, никаких лишних символов.


Сами указатели тема довольно обширная... Очень обширная. Это не только передача аргумента, что бы его вернуть в эту же переменную.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
09.06.2015, 14:03
Помогаю со студенческими работами здесь

Передача аргумента в функцию по значению, по ссылке, по указателю: в чём концептуальная разница?
Доброго всем здравия, прошу прощения, что достал уже всех этой темой. #include &lt;iostream&gt; using namespace std; int...

Помогите разобраться(С)Cпособы передачи аргументов в вызываемые функции: по значению, указателю и ссылке
Вычисление текущих значений Y(x) и S(x) (где x принадлежит диапазону ) реализовать в виде отдельных функций. При выполнении задания...

Передача по указателю и по ссылке
Всем привет! Есть функция, в которую передается ссылка: void Compare(int &amp;p) { int * str = p;// здесь ошибка нельзя...

Передача по ссылке или по указателю
Класс А здесь минимальный в реальности у него много переменных. Как лучше поступить в таком случае? Удобнее выпольнить передачу по ссылке,...

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


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

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

Новые блоги и статьи
Как писать чистый, тестируемый и качественный код на Python
py-thonny 12.07.2025
Помню свой первый проект на Python. Работал тогда быстро, грязно, лишь бы работало. Код был похож на запутанный клубок - переменные по одной букве, функции на 200 строк, комментарии отсутствовали как. . .
Blazor и контроллер сервопривода IoT Meadow Maple
Wired 11.07.2025
Я решил разобраться, как можно соединить современные веб-технологии с миром "железа". Интересная комбинация получилась из Blazor в качестве веб-интерфейса и микроконтроллера Meadow с его веб-сервером. . .
Генерация OpenQASM из кода Q#
EggHead 10.07.2025
Летом 2024-го я начал эксперименты с библиотекой Q# Bridge, и знаете что? Она оказалась просто находкой для тех, кто работает на стыке разных квантовых экосистем. Основная фишка этой библиотеки -. . .
Изучаем новый шаблон ИИ-чата .NET AI Chat Web App
stackOverflow 10.07.2025
В . NET появилось интересное обновление - новый шаблон ИИ-чата под названием . NET AI Chat Web App. Когда я впервые наткнулся на анонс этого шаблона, то сразу понял, что Microsoft наконец-то. . .
Результаты исследования от команды ARP (июль 2025 г.)
Programma_Boinc 10.07.2025
Результаты исследования от команды ARP (июль 2025 г. ) Африканский проект по дождям (ARP) World Community Grid снова запущен! Мы рады поделиться обновленной информацией о нашем прогрессе с осени. . .
Angular vs Svelte - что лучше?
Reangularity 09.07.2025
Сегодня рынок разделился на несколько четких категорий: тяжеловесы корпоративного уровня (Angular), гибкие универсалы (React), прогрессивные решения (Vue) и новая волна компилируемых фреймворков. . .
Code First и Database First в Entity Framework
UnmanagedCoder 09.07.2025
Entity Framework дает нам свободу выбора, предлагая как Code First, так и Database First подходы. Но эта свобода порождает вечный вопрос — какой подход выбрать? Entity Framework — это. . .
Как использовать Bluetooth-модуль HC-05 с Arduino
Wired 08.07.2025
Bluetooth - это технология, созданная чтобы заменить кабельные соединения. Обычно ее используют для связи небольших устройств: мобильных телефонов, ноутбуков, наушников и т. д. Работает она на частоте. . .
Руководство по структурам данных Python
AI_Generated 08.07.2025
Я отчетливо помню свои первые серьезные проекты на Python - я писал код, он работал, заказчики были относительно довольны. Но однажды мой наставник, взглянув на мою реализацию поиска по огромному. . .
Тестирование энергоэффективности и скорости вычислений видеокарт в BOINC проектах
Programma_Boinc 08.07.2025
Тестирование энергоэффективности и скорости вычислений видеокарт в BOINC проектах Опубликовано: 07. 07. 2025 Рубрика: Uncategorized Автор: AlexA Статья размещается на сайте с разрешения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru