Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
0 / 0 / 1
Регистрация: 28.02.2015
Сообщений: 65
1

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

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

Author24 — интернет-сервис помощи студентам
Чем отличается передача по ссылке от передачи по указателю аргументов в функцию?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.06.2015, 12:42
Ответы с готовыми решениями:

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

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

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

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

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

Добавлено через 3 минуты
А такая возможность вам дана чтобы вы могли передавать и переменные созданные в стеке int x; и переменные созданные в дин памяти int *x = new int; Хотя практически любую тривиальную задачу можно решать любым из этих способов
0
2683 / 2255 / 244
Регистрация: 03.07.2012
Сообщений: 8,196
Записей в блоге: 1
09.06.2015, 13:31 3
Почти ничем, но есть тонкости:
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 4
Цитата Сообщение от 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
09.06.2015, 14:03
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.06.2015, 14:03
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru