Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 8 мая!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

ПРОГРАММИРОВАНИЕ НА C и С++



Слушай, дружище, зачем так мучиться с этим языком С++, ты ведь не Билл Гейтс. Возьми тот же Python и программируй, он кроссплатформенный, под Windows тоже работает. Я сам давно заметил: то что на Си пишешь в страницу кода, на питоне решается в одну-две строки. При том, питон намного проще, я его сам недавно изучил по видеокурсу вот этому. Кстати, автор отлично там объясняет. Буквально день-два и уже будешь писать на нём, чего не скажешь про сложный С++.

Основы Visual C++
Урок 22. Указатели

Указатель - это просто переменная, котроая содержит адрес некоторой другой переменной. Вот так, например, мы можем объявить указатель на некоторую переменную целого типа:

int * p;

А вот так на две переменные типа bool:

bool * p1, * p2;

Обратите внимание, что мы ставим звездочку перед каждой переменной.

Отсюда понятен общий синтаксис объявления указателя на некоторый тип данных:

тип_данных * имя_переменной;

Обратите внимание, что указатели бывают разных типов - указатели на целый тип, указатели на тип float и т. д., и, скажем, указатель на переменную типа int - это вовсе не одно и тоже, что указатель на переменную типа float.

Разумеется указатель может быть не только стандартного типа (int, float и т. д.), но и типа некоторого класса (в том числе и определенного вами). Например:

CMyClass * p;

Вот пример использования указателя на переменную целого типа:

#include <fstream.h>
 
 void main(){
 
     int k=8;
 
     int *p; //p указывает в никуда
 
     p=&k;   //p теперь указывает на переменную k
 
     //Вывод переменной k двумя способами
 
     cout<<k<<"\n"; //Первый способ
 
     cout<<*p<<"\n";//Второй способ
 
 }

Результат выполнения программы будет такой:

Значение указателя

Обратите внимание на следующие моменты. Во-первых, для того, чтобы наш указатель показывал на конкретную переменную соответствующего типа, мы используем операцию взятия адреса (т. е. значок амперсанда &):

    ...
 
     p=&k;   //p теперь указывает на переменную k
 
     ...

И во-вторых, обратите внимание, как мы с помощью нашего указаетеля получаем доступ к переменной, на которую он указывает:

    ...
 
     p=cout<<*p<<"\n";//Второй способ
 
     ...

Если бы мы написали просто (без звездочки):

    ...
 
     p=cout<<p<<"\n";
 
     ...

, то у нас распечаталось бы не значение переменной, адрес которой хранится в нашем указателе, а сам адрес (т. е. значение указателя):

Значение указателя

Таким образом правило очень простое - хотим получить значение адреса - берем сам указатель, хотим получить значение переменной, на которую наш указатель показывает - берем указатель с приписаннной перед ним звездочкой.

К указателям применимы стандартные операции - присваивание и другие. Вот пример на присваивание:

#include <fstream.h>
 
 void main(){
 
     int k=8;
 
     int *p1=&k, *p2; //p1 указывает на переменную k,
 
                          //p2 указывает в никуда
 
     p2=p1;   //p2 тоже указывает на переменную k
 
     //Вывод переменной с помощью двух указателей
 
     cout<<*p1<<"\n"; //Первый способ
 
     cout<<*p2<<"\n"; //Второй способ
 
 
 
 }

А вот пример на операцию ++ :

#include <fstream.h>
 
 void main(){
 
     int k[2]={-3, 4}; //Задаем массив с двумя элементами
 
     int *p=&k[0]; //p1 указывает на первый элемент массива k
 
     //Вывод первого элемента массива и его адреса
 
     cout<<*p<<" "<<p<<"\n";
 
     p++; //Теперь p указывает на второй элемент массива
 
     //Вывод второго элемента массива и его адреса
 
     cout<<*p<<" "<<p<<"\n";
 
 }
Инкримент указателя

Обратите внимание, что в результате операции ++ значение указателя увеличилось на 4 (в шеснадцатеричном виде), так как размер переменной типа int - 4 байта. Таким образом значение указателя на тип int увеличивается с помощью ++ на размер переменной типа int (разумеется, аналогичное правило имеет место и для указателей на переменные других типов).



<< ВЕРНУТЬСЯ В ПОДРАЗДЕЛ

<< ВЕРНУТЬСЯ В ОГЛАВЛЕНИЕ




Материалы находятся на сайте https://exelab.ru/pro/



Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU
Проект ReactOS