Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 30, средняя оценка - 5.00
ogcjm124
2 / 2 / 0
Регистрация: 31.07.2011
Сообщений: 143
#1

Отличие передачи по ссылке от передачи указателя ? - C++

19.01.2012, 01:02. Просмотров 4033. Ответов 5
Метки нет (Все метки)

Чем отличаюся следующие коды?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class MyClass{
    int val;
public:
    int get_val(){return val;}
    int set_val(int i){val=i;}
};
 
void display(MyClass &ob){
    cout << ob.get_val();
}
 
int main(){
    MyClass obj;
    
    obj.set_val(10);
    display(obj);
 
    return 0;
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class MyClass{
    int val;
public:
    int get_val(){return val;}
    int set_val(int i){val=i;}
};
 
void display(MyClass *ob){
    cout << ob -> get_val();
}
 
int main(){
    MyClass obj;
    
    obj.set_val(10);
    display(& obj);
 
    return 0;
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class MyClass{
    int val;
public:
    int get_val(){return val;}
    int set_val(int i){val=i;}
};
 
void display(MyClass *ob){
    cout << ob -> get_val();
}
 
int main(){
    MyClass obj,*p=&obj;
    
    obj.set_val(10);
    display(p);
 
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.01.2012, 01:02
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Отличие передачи по ссылке от передачи указателя ? (C++):

Ошибка передачи указателя - C++
Здравствуйте, пытаюсь запустить программу, но выдает такую ошибку: C:\Users\user\Documents\MyPrograms\C++\lab2\lab2\thread.cpp:26:...

Отличие способов передачи массива в функцию - C++
В чем отличие: double sum(double x) от double sum(double *x) ?

функции в языке с: (использовать механизм передачи параметров по ссылке) - C++
реализовать функцию, осущ. поиск в целочисленном массиве 4-го максимума и 3-го минимума. В качестве параметров функции выступают массив и...

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

При передачи указателя на обьект ошибка,а при передаче ссылки на указатель нет. Почему? - C++
Hi All! class SomeObj { public: int x; }

В чём отличие константного указателя и указателя на константу? - C++
int *const p1 и int const* p2 Объясните мне в чём тут отличие.

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
soon
2540 / 1305 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
19.01.2012, 01:10 #2
Цитата Сообщение от ogcjm124 Посмотреть сообщение
Отличие передачи по ссылке от передачи указателя ?
Во втором случае нужно передавать адрес. И ссылка, в отличие от указателя не разыменовывается.
Цитата Сообщение от ogcjm124 Посмотреть сообщение
Чем отличаюся следующие коды?
В первом передача по ссылке, в остальных по указателю. В последнем еще создается указатель на MyClass.
ogcjm124
2 / 2 / 0
Регистрация: 31.07.2011
Сообщений: 143
19.01.2012, 01:20  [ТС] #3
Правильно ли я понимаю, что передача по ссылке и передача указателя в обоих случаях отличаются лишь формально.Ведь во всех случаях результатом передачи является передача адреса.Во всём остальном всё происходит абсолютно одинаково,так ли это (не вызывается контсруктор копий и т.п.)?
soon
2540 / 1305 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
19.01.2012, 01:29 #4
Да. Ссылка это тот же указатель. Но она всегда указывает на определенный участок пямяти. И автоматически разыменовывается при обращении.
Если интересно, можете перегнать
этот
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
#include <string>
 
void func(int& a)
{
    a = 5;
}
 
int main()
{
    int a = 4;
    func(a);
}
код в ассемблер. Сначала с cсылками, потом с указателями. И сравните.
ogcjm124
2 / 2 / 0
Регистрация: 31.07.2011
Сообщений: 143
19.01.2012, 01:38  [ТС] #5
Я пока не знаком с ассемблером.Так что вы скажите отличается если да то чем?
soon
2540 / 1305 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
19.01.2012, 01:45 #6
Абсолютно идентичны.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.01.2012, 01:45
Привет! Вот еще темы с ответами:

Отличие указателя от массива - C++
Чем отличается wchar_t* strDelimit = L&quot; &quot;; от wchar_t strDelimit = L&quot; &quot;; Понятно что одно указатель, а второе массив, но на...

Ошибка передачи сообщения - C++
В Берляндском государственном университете локальная сеть между серверами не всегда работает без ошибок. При передаче двух одинаковых...

системы передачи информации - C++
Здравствуйте скажите пожалуйста что является системами передачи информации?

Функция передачи файла - C++
Помогите, пожалуйста. Как написать функцию передачи файла на iOS, девайс джейлбрейкнут, iTunes установлен.


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
19.01.2012, 01:45
Ответ Создать тему
Опции темы

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