Лекция 10. Общие понятия. Типы указателей. Управляемые и неуправляемые указатели. Указатели на функцию. Примеры использования



жүктеу 112.88 Kb.
бет5/12
Дата10.11.2022
өлшемі112.88 Kb.
#23641
түріЛекция
1   2   3   4   5   6   7   8   9   ...   12
Лекция 10
11 лекция
10.3.2. Разыменование указателя


Операция разыменования может применяться только к указателям и дает ту переменную, на которую этот указатель указывает. Результат этой операции может встречаться как в левой части оператора присваивания, что означает присваивание выбранной указателем переменной, так и в правой, что означает использование значения указываемой переменной.
Таким образом, если p — указатель на целую переменную, то *p обозначает ту переменную, на которую указывает p.
Тип данных указателя необходим при разыменовании указателя, чтобы он знал, сколько данных он должен прочитать. Например, разыменование указателя char должно считывать следующий байт из адреса, на который он указывает, в то время как целочисленный указатель должен считывать 4 байта.
Ниже приведена программа , демонстрирующая разыменование указателя int.

#include


int main()
{
int a = 20; // объявление целой переменной
int* ptr; //объявление целого указателя
ptr = &a;// Сохранить адрес переменной 'а' в переменной указателя 'ptr'
*ptr = 8; //значение переменной 'а' изменяется на 8
//путем разыменования указателя 'ptr'
printf("Value of а is : %d", a);
return 0;
}

Операцию взятия адреса можно применять обычно к так называемым l-величинам, т. е. к тем выражениям, которые могут стоять в левой части операции присваивания. Примерами таких выражений могут служить переменные, элементы массивов, поля структурных переменных. Исключением являются битовые поля — что это такое, будет объясняться позже. Имеются из этого правила исключения и в другую сторону: операцию взятия адреса можно применять к поименованным константам.


Пример использования динамических переменных


#include
using namespace std;
int main()
{
int *a = new int; // Объявление указателя для
//переменной типа int
int *b = new int(5); // Инициализация указателя
*a = 10;
*b = *a + *b;
cout << "b is " << *b << endl;
delete b;
delete a;
return 0;
}

Мы выводим на экран значениекоторое находится в ячейке памяти (например, 0x1aba030, но у каждого может быть свой адрес): 



жүктеу 112.88 Kb.

Поделитесь с Вашими друзьями:
1   2   3   4   5   6   7   8   9   ...   12




©emirb.org 2022
әкімшілігінің қараңыз

    Басты бет