Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
38
Добавлен:
16.04.2013
Размер:
56.83 Кб
Скачать

Определение адреса и разыменования.

Если p – указатель, то *р – это значение, находящееся по адресу, который хранится в указателе р.

Рассмотрим примеры:

Int i=5;j;

Int*p=8i; //указатель инициализирован адресом переменной i

Cout<<*p<<”=i, хранится по адресу”endl;

J=p: // недопустимо, указатель не преобразуется в целое

J=*p+1; //допустимо

p=8j; // теперь р указывает на j

При обращении к функции указатели могут передаваться в качестве аргументов.

//вызов по ссылке на основе указателей

void order (int*, int*);

int main()

{ int i=7, j=3;

cout<<i<<’\t’<<j<<endl; //напечатается 7и3

order (&, &j );

cout<<i<<’\t’<<j<<endl; //напечатаются 3 7

}

void order (int*p, int*q)

{ int temp;

if (*p>*q) {

temp=*p;

*p=*q;

*q=temp;

}

}

Применение void.

Ключевое слово void используется как возвращаемый тип функции, не возвращающей значения. Для указателей void используется для объявления обобщенного указателя (void*p;). Такому указателю можно присвоить адрес переменной любого типа, но он не может быть разыменован.

void*gp; // обобщенный указатель

int*ip; // указатель на int

char*cp // указатель char

gp=ip; // допустимо

cp=ip // не допустимо

*ip=15 // допустимо

*ip=*gp; // недопустимо разыменование gp

ip=static_cast<int*>(gp); //допустимо

Рассмотрим еще пример 9.2.

/* использование указателя на void для адресации буфера */

#include <stdio.h>

#include <dos.h>

void DispPointer(void *p);

main()

{

char buffer[1024];

void *bp;

bp = &buffer; /* присваивание адреса буфера указателю bp */

*(char *)bp = 'A'; /* запоминание символа через указатель */

buffer[1] = 'B'; /* прямое запоминание символа */

buffer[2] = 0; /* вставка нуля после "AB" */

printf("Address of buffer == ");

DispPointer(&buffer);

printf("Data in buffer == %s", (char *)bp);

return 0;

}

void DispPointer(void *p)

{

printf("%04x:%04x\n", FP_SEG(p), FP_OFF(p));

}

Соседние файлы в папке Тельминов (мб)