Этапы разработки программы. Разработка или выбор алгоритма решения поставленной задачи. Оформление документации на программу, страница 19

1.  Использовать функцию динамического распределения памяти, например, malloc языка C. (*)

2. Присвоить указателю адрес статической переменной. Поскольку память под переменную отводится в момент ее объявления, то присвоение указателю адреса переменной гарантирует, что нужная память отведена.(**)

2

 
3.  Присвоить указателю значение указателя ранее правильно инициализированного, т.е. это значит, что одному и тому же адресу присваиваются различные имена.  Х             Y

Пример:

#include<stdio.h>

#include<alloc.h> - этот файл содержит прототипы функций динамического распределения

void main(void)       памяти.    

{

int *x=(int*)malloc(sizeof(int));                     

int *y=(int*)malloc(sizeof(int));                      

int *z=(int*)malloc(sizeof(int));                     

*x=1; *y=2; *z=3;

printf(“\n x=%d y=%d z=%d”,*x,*y,*z);

 x             y            z

1

 

2

 

3

 
 


1)             *z=*x;

printf(“\n x=%d y=%d z=%d”,*x,*y,*z);

x            y            z

1

 

2

 
 


2)            y=x;

printf(“\n x=%d y=%d z=%d”,*x,*y,*z);

  x            y             z

1

 

2

 

1

 
                                             free(y);

3)           *x=-1; *y=-2; *z=-3;

printf(“\n x=%d y=%d z=%d”,*x,*y,*z);

  x             y            z

2

 

-2

 

-3

 
 


Замечание: 1)В языке С++ для работы с динамическими объектами применяются специальные операции new и delete. С помощью операции new выделяется память под динамический объект(созданный в процессе выполнения программы), а с помощью delete созданный объект удаляется из памяти. 

2) Во многих реализациях языка PASCAL существуют и другие процедуры для работы с динамической памятью, например, в Turbo Pascal:

GetMem(<указатель>,<размер в байтах>);

FreeMem(<указатель>,<размер в байтах>);

Указатели тесным образом связаны с обработкой массивов и строк.

18.2Указатели и массивы.

Имя массива фактически является константным указателем, хранящим адрес первого элемента массива (элемента под индексом 0). Начальный адрес статического массива определяется компилятором в момент объявления массива, и такой адрес не может быть переопределен. Пример: float mas[6]; // массив из 6 элементов, тогда записи mas[0] и & mas[0]– эквивалентны и определяют адрес 1-го элемента массива. Оба значения являются константами типа указатель, переопределять их нельзя, однако, эти значения можно присваивать переменным типа указатель.              

Пример:

1)   float mas[6];

float *m= (float *)malloc(sizeof(float));

*m=1.5;

m=mas;           

2)   var a, b:array[1..10] of real;

b:=a;{ все значения из массива а перепишутся в массив b}

В C такое недопустимо

float a[10], b[10];

b=a; //ошибка, т.к. указатель на массив – константа

Если же a и b – будут динамическими массивами, то такое допустимо:

int *a= (int *)malloc( 10*sizeof(int));                                                                             

int *b= (int *)malloc( 10*sizeof(int));