Топ контрибуторов
loading
loading
Знаете ли Вы, что

Свои вопросы для тестов можно добавлять на странице с информацией о тесте. При этом для некоторых тестов добавление вопросов закрыто

Лента обновлений
ссылка Oct 26 14:07
Комментарий от XenoZD:
Я получил это задание в следующем тесте, просто по памяти...
ссылка Oct 26 13:37
Комментарий от XenoZD:
Ну хорошо, в конструкторе вызов метода, что выведет сообщ...
ссылка Oct 26 13:31
Комментарий от XenoZD:
Репорта на ошибку нет, пишу здесь
Повторяю сказанное выше...
ссылка Oct 24 22:37
Комментарий от prof1A23:
полное несоответствие названию, вопросы которые соверше...
ссылка Oct 24 20:16
Комментарий от Mykhailo12:
методы: notifyAll(), notify(), wait() финальние, поет...
Статистика

Тестов: 153, вопросов: 8596. Пройдено: 470995 / 2297249.

C++ for beginner:Указатели и ссылки

head tail Статья
категория
C++
дата02.02.2013
авторdenis762
голосов21

Ссылки:
Ссылка это "псевдоним" переменной. Ссылка инициализируется при объявлении, и изменению не подлежит.
Объявляется так:
тип &имя_ссылки = имя_переменной; тип ссылки и переменной должны быть одинаковыми.

Пример:

#include 
using
namespace std;
int main()
{
int a = 5; //объявляем переменную
int &p = a; /объявляем ссылку. теперь p это псевдоним a 
cout << a << ' ' << p << endl; //выведет 5 5
a = 6;
cout << a << ' ' << p << endl; //выведет 6 6
p = 7;
cout << a << ' ' << p << endl; //выведет 7 7
return
0;
}


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

#include 
using
namespace std;
void
func(int &p)
{
p++; //увеличиваем переданную переменную
}
 
int main()
{
int a = 5; //объявляем переменную
func(a); //передаём переменную.  
cout << a << endl; //покажет 6
return
0;
}

Также можно создать ссылку на функцию и вызвать её:

#include 
using
namespace std;
 
void
func(int s)
{
cout << s << endl;
}
 
int main()
{
void
(&rf)(int) = func;
func(123); //покажет 123
rf(321); //покажет 321
return
0;
}



Указатели:
Указатель очень похож на ссылку. Он тоже указывает на адрес в памяти, но его можно изменять (и не обязательно инициализировать при объявлении). Также он может быть равен нулю.
Объявляется так:
тип *имя_ссылки = &имя_переменной;
тип ссылки и переменной должны быть одинаковыми (с одним исключением, см ниже про *void).
&имя_переменной возвращает адрес этой переменной.
*имя_указателя - работает со значением
имя указателя - работает с адресом
Приведём примеры наподобие выше пред ставленых:

Раз:

#include 
using
namespace std;
int main()
{
int a = 5; //объявляем переменную №1
int *p = &a; /объявляем указатель.
cout << a << ' ' << *p << endl; //выведет 5 5
a = 6;
cout << a << ' ' << *p << endl; //выведет 6 6
*p = 7;
cout << a << ' ' << *p << endl; //выведет 7 7
 
int b = 8; //объявляем переменную №2
int *p = &b; /объявляем указатель. внимание - указатель остался тотже, но мы меняем адрес на который он указывает
cout << b << ' ' << *p << endl; //выведет 8 8
a = 9;
cout << b << ' ' << *p << endl; //выведет 9 9
*p = 10;
cout << b << ' ' << *p << endl; //выведет 10 10
return
0;
}


Два:

#include 
using
namespace std;
void
func(int *p)
{
(*p)++; //увеличиваем переданную переменную
}
 
int
main()
{
int
a = 5; //объявляем переменную
func(&a); //передаём переменую.  
cout << a << endl; //покажет 6
return
0;
}


Три:

#include 
using namespace std;
 
void func(int s)
{
cout << s << endl;
}
 
int main()
{
void (*rf)(int) = func;
func(123); //покажет 123
(*rf)(321); //покажет 321
return 0;
}


Теперь про вышесказанное исключение:
указатель может указзывать на void, тоесть:
void *имя указателя = &имя_переменной; Причём тип_переменно может быть абсолютно любым. Тоесть данный указатель не хранит размер переменной, а хранит только адрес.


Вобщем на этом всё, если статья понравится напишу продолжение, про динамические массивы и строки, а также немного подробнее про *void.

Если Вам понравилась статья, проголосуйте за нее

Голосов: 21  loading...
lupus   vitalikrst1   d3tafaq   Sergey_Pugach86   tandriy88   powerless   scrash   Tristan   oxmap   GvinP   Aruy   dark13   Gurbych   Gekkey   a111111   Dasha51   the4th   vbereza   milcars   alexander_1296   DariaTsybr