Эту статейку я написал для тех, кто начиная изучать С++ побаивается указателей
На самом деле нет ничего страшного, это всего лишь обыкновенная косвенная адресация.
Для написания демки я использовал C++Builder, написал консольное приложение.
Вообще всем кто хочет стать программистами советую начинать именно с консольных приложений!
В открывшееся окошко программы нужно вставить строчку
#include <iostream>
Ну вот можно и указателями заняться.
Для начала объявим переменные и присвоим значения:
int a,b,q,w;
a=10;
b=20;
А теперь немного теории ...
&- знак взятия адресса переменной.
то есть если записать &a - то это значит адресс переменной.
Чтобы посмотреть адресс переменной напишем строчку
cout << "&a = " << &a << endl;
На экран выведется длинное число с адрессом, в котором находится переменная "а".
( Далее на фото текст всей демки с коментариями и результат работы консоли)
Чтобы хранить эти адресса существует особый вид переменных - указатели. По сути &а
это тоже указатель, но не переменная , а константа.
Чтобы объявить переменную-указатель используется звёздочка -*
На самом деле всё намного проще, *- это символ косвенной адрессации, то есть обратное действие &
int *c,*d; -объявляет указатели на тип int .То есть говорит, что адресса в этих указателях для переменных
типа int.
c=&a; -в указатель "с" записали адресс переменной "а"
Теперь если добавим строчку
cout << "c = " << c << endl;
То увидим, что результат тот же, что и в строчке
cout << "&a = " << &a << endl;
q=*c; - означает, что в переменную "q" поместится значение из адресса на который указывает указатель "с",
то есть из адресса переменной "а" . Эта запись равносильна "q=a"
cout << "q = " << q << endl; -покажет результат
Теперь займёмся указателем на указатель.
d=&b;- указатель на переменную "b"
int **s; объявляем указатель на указатель. Всё очень просто, так как указатель -переменная,
значит у указателя тоже свой адресс имеется
s=&d; -присваиваем указателю на указатель "s" адресс указателя d
Чтобы вытащить значение самой переменной придётся уже звёздочкой воспользоваться дважды.
Вот строчки:
cout << "d = " << d << endl;
cout << "s = " << s << endl;
cout << "**s = " << **s << endl;
Ну вот пожалуй и всё. Поняв этот материал больше проблем в изучении С++ не будет!
#pragma hdrstop
#include <condefs.h>
#include <iostream>
//---------------------------------------------------------------------------
#pragma argsused
int main(int argc, char **argv)
{
int a,b,q,w;
a=10;
b=20;
int *c,*d;
c=&a;
d=&b;
q=*c;
w=*d;
int **s;
s=&d;
cout << "&a = " << &a << endl;
cout << "&b = " << &b << endl;
cout << "c = " << c << endl;
cout << "d = " << d << endl;
cout << "q = " << q << endl;
cout << "w = " << w << endl;
cout << "s = " << s << endl;
cout << "**s = " << **s << endl;
system("pause");
return 0;
}