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

Содержание

Слайд 2

Операции

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

Операции 1.Получение адреса & P=&C - занести в ячейку P адрес ячейки
Рассмотрим расположение переменных
в оперативной памяти при их объявлении
int n,k;
float x,y;

Слайд 3

65516
65512
65522
65520

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


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

65516 65512 65522 65520 % u printf(“адрес %u ”, &var); printf(“ %
”, &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,

Пример Рассмотрим расположение переменных в оперативной памяти при объявлении указателя int k=10, n, *pt_k; n=k
*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);
printf("\n

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
printf(“a=%5.2f b=%5.2f ”,a,b );
На

Аналогично для действительных чисел float a=6.1, *pt_а, b; ptr_a=&a; b=a; b=*ptr_a printf(“a=%5.2f
экране
a=6.1 b=6.1

Слайд 9

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

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

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

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

Слайд 10

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

int *pa

*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 ”, &b);
printf(“ % u ”, &b[0]);
printf(“ %

65122 65122 65126 65130 65134 float b[10] printf(“ % u ”, &b);
u ”, &b[1]);
printf(“ % u ”, &b[2]);
printf(“ % u ”, &b[3]);

Слайд 12

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

int t[5][3]

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

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

Слайд 13

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)

pt_t+14 pt_t+0 pt_t+1 pt_t+2 pt_t+3 pt_t+4 Описание с помощью указателя int *pt_t;
t[0][1]
*(pt_t+2) t[0][2]
*(pt_t+3) t[1][0]
*(pt_t+4) t[1][1]

Слайд 15

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

ДИНАМИЧЕСКОЕ РАСПРЕДЕЛЕНИЕ ПАМЯТИ 1.Функции выделения памяти malloc() (от memory 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<5;i++)
{

void main() { int i; int *x=(int*) malloc (5*sizeof(int)); for (i=0;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<5;i++)
{
*(r+i)=(0.001*rand());
printf("\n %8.2f",*(r+i));
printf(" %u",

float *r=(float*) calloc (5,sizeof(float)); for (i=0;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];-выделение
[K];-выделение памяти
для массива из к элементов
Освобождение памяти
delete <указатель> ;
delete [ ] <указатель> ;

Слайд 21

Пример.
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;

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

Слайд 22

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;

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;
Имя файла: Указатели-и-адреса.pptx
Количество просмотров: 34
Количество скачиваний: 0