Технология программирования. Базовые конструкции C/C++. Липачев Е.К. - 72 стр.

UptoLike

Составители: 

72
Преобразование типа указателя
Указатель на один тип данных путем преобразования можно
рассматривать как указатель на другой тип данных. Обычно подобное
преобразование выполняют для указателей, имеющих тип void *, но
разрешено выполнять преобразование и для указателей других типов.
Пример. Выделение памяти функцией malloc(). Эта функция
возвращает значение типа void *, в приведенном коде выполнено
преобразование к типу int *.
int * p;
p = (int *) malloc(sizeof(int)); /* Выделение памяти
для целого. */
Пример. Как не стоит делать преобразование типа. Указателю p на
int присвоено значение указателя px на double и выполнено необходимое
преобразование типа. В результате, обе переменные px и p имеют
одинаковые значения, но ссылаются на разные данные, первый указатель
ссылается на блок памяти, занятый значением типа double, а указатель p
ссылается только на первые 4 байта этого блока.
double x=3.1415; double *px;
px = &x;
int *p;
p=(int *)px;
cout<<"\n px="<<px<<" p="<<p;
cout<<"\n *px="<<*px<<" *p="<<*p;
Указатели и массивы
Имя массива является указателем и содержит адрес первого элемента
массива. Если, например, w имя массива, то *w значение первого
элемента массива, а обращение w[i] к i-му элементу массива есть
Преобразование типа указателя
     Указатель на один тип данных путем          преобразования можно
рассматривать как указатель на другой тип данных. Обычно подобное
преобразование выполняют для указателей, имеющих тип void *, но
разрешено выполнять преобразование и для указателей других типов.
     Пример. Выделение памяти функцией malloc(). Эта функция
возвращает значение типа void *, в приведенном коде выполнено
преобразование к типу int *.
int * p;
p = (int *) malloc(sizeof(int)); /* Выделение памяти
для целого. */
     Пример. Как не стоит делать преобразование типа. Указателю p на
int присвоено значение указателя px на double и выполнено необходимое
преобразование типа. В результате, обе переменные px и p имеют
одинаковые значения, но ссылаются на разные данные, – первый указатель
ссылается на блок памяти, занятый значением типа double, а указатель p
ссылается только на первые 4 байта этого блока.
double x=3.1415; double *px;
px = &x;
int *p;
p=(int *)px;
cout<<"\n px="<