1. Использовать функцию динамического распределения памяти, например, malloc языка C. (*)
2. Присвоить указателю адрес статической переменной. Поскольку память под переменную отводится в момент ее объявления, то присвоение указателю адреса переменной гарантирует, что нужная память отведена.(**)
|
Пример:
#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) *z=*x;
printf(“\n x=%d y=%d z=%d”,*x,*y,*z);
x y z
|
|
2) y=x;
printf(“\n x=%d y=%d z=%d”,*x,*y,*z);
x y z
|
|
|
3) *x=-1; *y=-2; *z=-3;
printf(“\n x=%d y=%d z=%d”,*x,*y,*z);
x y z
|
||||||
|
|
|||||
Замечание: 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));
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.