Указатели и адреса

Содержание

Слайд 2

Операции 1.Получение адреса & P=&C - занести в ячейку P адрес

Операции

1.Получение адреса
&
P=&C - занести в ячейку P адрес ячейки

C
Пример: Рассмотрим расположение переменных
в оперативной памяти при их объявлении
int n,k;
float x,y;
Слайд 3

65516 65512 65522 65520 % u printf(“адрес %u ”, &var); printf(“

65516
65512
65522
65520

% u
printf(“адрес %u ”, &var);


printf(“ % u ”, &x);
printf(“ %

u ”, &y);
printf(“ % u ”, &n);
printf(“ % u ”, &k);

используем указатель, например для x и получим его адрес
float *p;
p=&x;
printf(“%u”,p); 65516

Слайд 4

2. Получение значения по адресу. * занести в ячейку t данные,

2. Получение значения по адресу.

*

занести в ячейку t данные, расположенные

в ячейке, на которую указывает указатель p

*p
t= *p -

Слайд 5

Пример Рассмотрим расположение переменных в оперативной памяти при объявлении указателя int k=10, n, *pt_k; n=k

Пример Рассмотрим расположение переменных
в оперативной памяти при объявлении указателя
int k=10,

n, *pt_k;

n=k

Слайд 6

ptr_k=&k n = *ptr_k;

ptr_k=&k

n = *ptr_k;

Слайд 7

void main() { int *pt_k, n, k=10; pt_k=&k; n=*pt_k; printf("\n k=%d",k);

void main()
{
int *pt_k, n, k=10;
pt_k=&k;
n=*pt_k;
printf("\n k=%d",k);

printf("\n адрес_k=%u",&k);
printf("\n pt_k=%u",pt_k);
printf("\n k_по_указателю=%d",*pt_k);
printf("\n n=%d",n);
}

На экране
к=10
адрес_k=65520
pt_k=65520
k_по_указателю=10
n=10

Слайд 8

Аналогично для действительных чисел float a=6.1, *pt_а, b; ptr_a=&a; b=a; b=*ptr_a

Аналогично для действительных чисел

float a=6.1, *pt_а, b;
ptr_a=&a;
b=a;
b=*ptr_a
printf(“a=%5.2f b=%5.2f ”,a,b

);
На экране
a=6.1 b=6.1
Слайд 9

Указатели и массивы. 1.Одномерные масссивы Известное статическое описание int a[10] a[0]

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

1.Одномерные масссивы
Известное статическое описание
int a[10]

a[0] a[1] a[9]
a[i]

– соответствует i-элементу.
Слайд 10

*pa - указатель на тип int Описание с помощью указателя int

*pa - указатель на тип int
Описание с помощью указателя

int

*pa

pa+1 pa+i pa+9

pa a[0] a[1 ] a[i] a[9]

*pa a[0]

*(pa+1) a[1]

Слайд 11

65122 65122 65126 65130 65134 float b[10] printf(“ % u ”,

65122
65122
65126
65130
65134

float b[10]


printf(“ % u ”, &b);
printf(“ % u ”, &b[0]);
printf(“

% u ”, &b[1]);
printf(“ % u ”, &b[2]);
printf(“ % u ”, &b[3]);
Слайд 12

2. Двухмерные масссивы Известное статическое описание int t[5][3] t[i][j]–соответствует элементу, расположенному

2. Двухмерные масссивы
Известное статическое описание

int t[5][3]

t[i][j]–соответствует элементу,
расположенному в

i-той строке и j-том столбце.
Слайд 13

pt_t+14 pt_t+0 pt_t+1 pt_t+2 pt_t+3 pt_t+4 Описание с помощью указателя int

pt_t+14

pt_t+0

pt_t+1

pt_t+2

pt_t+3

pt_t+4

Описание с помощью указателя
int *pt_t;
*pt_t - указатель на тип int

*pt_t

*pt_t

t[0][0]
*(pt_t+1) t[0][1]
*(pt_t+2) t[0][2]
*(pt_t+3) t[1][0]
*(pt_t+4) t[1][1]
Слайд 14

Слайд 15

ДИНАМИЧЕСКОЕ РАСПРЕДЕЛЕНИЕ ПАМЯТИ 1.Функции выделения памяти malloc() (от memory allocation, выделение

ДИНАМИЧЕСКОЕ РАСПРЕДЕЛЕНИЕ ПАМЯТИ
1.Функции выделения памяти
malloc() (от memory allocation, выделение памяти),
calloc () (от clear

allocation, чистое выделение (памяти))
realloc () (от reallocation, перераспределение памяти).
free ()

Например
malloc(20*sizeof(int));
calloc(20, sizeof(int));
free();
Слайд 16

Пример. Сформировать массив целых чисел. Определить адреса элементов массива. Сформировать массив

Пример. Сформировать массив целых чисел.
Определить адреса элементов массива.
Сформировать массив

вещественных чисел.
Определить адреса элементов массива.
#include
#include
#include
Слайд 17

void main() { int i; int *x=(int*) malloc (5*sizeof(int)); for (i=0;i

void main()
{
int i;
int *x=(int*) malloc (5*sizeof(int));
for (i=0;i<5;i++)

{
*(x+i)=int(0.002*rand());
printf("\n % 2d",*(x+i));
printf(" %u", (x+i));
}
free(x) ;
Слайд 18

float *r=(float*) calloc (5,sizeof(float)); for (i=0;i { *(r+i)=(0.001*rand()); printf("\n %8.2f",*(r+i)); printf("

float *r=(float*) calloc (5,sizeof(float));
for (i=0;i<5;i++)
{
*(r+i)=(0.001*rand());
printf("\n %8.2f",*(r+i));
printf("

%u", (r+i));
}
free(r) ;
}
Слайд 19

На экране

На экране

Слайд 20

2.Операторы new и delete Выделение памяти = new ; = new

2.Операторы new и delete
Выделение памяти
<указатель> = new <тип>;
<указатель> = new

<тип> [K];-выделение памяти
для массива из к элементов
Освобождение памяти
delete <указатель> ;
delete [ ] <указатель> ;
Слайд 21

Пример. void main() { int *x,i; x=new int[10]; for (i=0;i {

Пример.
void main()
{
int *x,i;
x=new int[10];
for (i=0;i<5;i++)
{
*(x+i)=12+int(random(50));
printf("\n % 2d",*(x+i));
printf(" %u", (x+i));
}
delete[]x;

Слайд 22

float *a; a=new float[10]; for (i=0;i { *(a+i)=0.01*rand(); printf("\n % .2f",*(a+i)); printf(" %u", (a+i)); } delete[]a;

float *a;
a=new float[10];
for (i=0;i<5;i++)
{
*(a+i)=0.01*rand();
printf("\n % .2f",*(a+i));
printf(" %u", (a+i));
}
delete[]a;