|
Указатели в С++Эту статейку я написал для тех, кто начиная изучать С++ побаивается указателей :) На самом деле нет ничего страшного, это всего лишь обыкновенная косвенная адресация. Для написания демки я использовал 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; } © ЯКВ-мистери 2000-2014 kestrens@mail.ru
|