Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ООП_Лаб_Гриф.doc
Скачиваний:
7
Добавлен:
14.11.2019
Размер:
2.81 Mб
Скачать

Приклад

double*dp;

d = (double*) malloc (sizeof (double)); //Функція malloc ( ) виділяє пам'ять

*dp = 22 / 7.0;

free (dp); //Звільнення динамічно виділеної у «купі» пам'яті

В даному випадку при використанні функції malloc ( ) забезпечується перетворення значення, що повертається, з покажчика на тип void у покажчик на тип double, який має покажчик dp.

Приклад

/* ЗАНЯТТЯ N 8

Виконав студент групи ......... Петров П.В.

Застосування покажчиків при роботі з перемінними

різних типів, зміна значень перемінних за адресою

і за посиланням. Приклади операцій з покажчиками */

#include <stdio.h>

#include <conio.h>

#include <string.h>

#include <alloc.h>

int a; //Оголошення глобальної перемінної типу int (а = 0)

int main( void )

{char c1, c2, buf[20]; //buf – ім’я масиву є покажчиком на тип char

char *pc = NULL; //Ініціалізація покажчика константою NULL

char *pst = " \"slovo\" "; //Оголошення покажчиків на тип char

int *pi = &a;

float *pf, f = 26.6; //Оголошення покажчика на тип float

double *pd, d; //Оголошення покажчика на тип double

double &sd = d; //Оголошення посилання на тип double

void *pv; //Оголошення покажчика на тип void

char *pchar = (char *) malloc( 20 ); //Виділення пам'яті у “купі”

clrscr( );

pc = &c1; pf = &f; pd = &d; //Взяття адрес перемінних

printf(" Введення перемінної c1 типу char: ");

scanf("%c", pc); //Функція введення даних, & - операція узяття

//адреси для покажчика pc відсутня

printf(" Виведення перемінної c1 типу char: ");

printf("%c\n", *pc);

fflush( stdin );

pc = &c2;

printf(" Введення перемінної c2 типу char: ");

scanf("%c", pc); //Функція введення даних, & - операція узяття

//адреси для покажчика pc відсутня

printf(" Виведення перемінної c2 типу char: ");

printf("%c\n", *pc);

printf("\n Введення перемінної (a) типу int: ");

scanf("%d", pi);

a += 5; //Зміна а = а+5

++ *pi; //Зміна а = а+1 за допомогою покажчика pі

printf(" \t Виведення (a) після зміни а=а+5+1\n");

printf(" Формат виведення (int): +6d #6o #8x\n");

printf("\t\t |%+6d| %#6o| %#8x| \n ", a, *pi, *pi);

printf("\n Виведення вихідного рядка: %s\n", pst);

pc = pst;

printf(" Виведення рядка в циклі: \n");

while(*pc!='\0') { printf(" %s",pc); pc++; }

printf("\n Введення рядка до масиву: ");

scanf("%s", buf);

pv = buf; //Використання покажчика (pv) на тип void

printf(" Виведення рядка з масиву: %s \n", (char *)pv); //pv - став char *

printf(" Введення рядка до динамічної пам'яті: ");

scanf("%s", pchar);

printf(" Виведення рядка з динамічної пам'яті: %s\n", pchar);

printf(" Введення перемінних типу float і double (через пробіл): \n");

printf("\t\t ");

scanf("%f %lf", pf, pd);

pv = pf; //Використання покажчика (pv) на тип void

*pf = *(float *)pv * 10; //Аналогічно f = 10, або f = f * 10

*pd = sd + *(float *)pv; //Використання посилання (sd) на тип double

//аналогічно d = d + f або d += f

pv = pd;

printf("\t Виведення результатів розрахунку f *= 10 d += f \n");

printf(" Формат виведення (float): 10.6f 10.6e +10.6g\n");

printf("\t\t |%10.6f| %10.6e| %+10.6g| \n", f, *pf, *pf);

printf(" Формат виведення (double): 10.8lf 10.8e 10.8g\n");

printf("\t\t |%10.8lf| %10.8e| %+10.8g| \n ", *pd, *(double *)pv, sd);

getche( );

return 0;

}

/* Введення перемінної c1 типу char: w

Виведення перемінної c1 типу char: w

Введення перемінної c2 типу char: t

Виведення перемінної c2 типу char: t

Введення перемінної (a) типу int: 40

Виведення (a) після зміни а=а+5+1

Формат виведення (int): +6d #6o #8x

| +46| 056| 0x2e|

Виведення вихідного рядка: "slovo"

Виведення рядка в циклі:

"slovo" slovo" lovo" ovo" vo" o" "

Введення рядка до масиву: unsigned

Виведення рядка з масиву: unsigned

Введення рядка до динамічної пам'яті: dinamo

Виведення рядка з динамічної пам'яті: dinamo

Введення перемінних типу float and double (через пробіл):

1.5 20.4

Виведення результатів розрахунку *pf = *pf * 10; *pd = *pd + f;

Формат виведення (float): 10.6f 10.6e +10.6g

| 15.000000| 1.500000e+01| +15|

Формат виведення (double): 10.8lf 10.8e 10.8g

|35.40000000| 3.54000000e+01| +35.4| */