Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Программирование 07

.pdf
Скачиваний:
8
Добавлен:
26.03.2015
Размер:
252.21 Кб
Скачать

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

Пусть ip указывает на переменную типа int int i = 5, x = 1, y = 0;

ip = &i;

тогда

y = *ip + x;

эквивалентно y = i + x;

Везде где мы можем использовать переменную определённого типа мы можем использовать указатель этого же типа с операцией ссылки по указателю.

15.10.13

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

Указатели и сами являются переменными, поэтому их можно использовать и без операции ссылки по указателю.

int i = 5; int *ip, *ip2; ip = &i;

ip2 = ip; /* теперь и ip и ip2 указывают на i */

15.10.13

Указатели и аргументы функций

Поскольку в языке C аргументы в функции передаются по значению (передаются копии), не существует прямого способа изменить значение переменной вызывающей функции из вызываемой.

15.10.13

Указатели и аргументы функций

Давайте попробуем разобраться что произойдёт в этом случае:

void swap(int x, int y)/*НЕПРАВИЛЬНО*/

{

int temp; temp = x; x = y;

y = temp;

}

15.10.13

Указатели и аргументы функций

Правильно будет записать так: void swap(int *px, int *py)

{

int temp; temp = *px; *px = *py; *py = temp;

}

Вызывать её нужно так:

swap(&a, &b); // передаём адреса переменных

Вспоминаем функцию scanf()!

15.10.13

Указатели и аргументы функций

Условно это можно показать так:

15.10.13

Указатели и аргументы функций

Благодаря аргументам-указателям функция может получать доступ к объектам в вызывающей её функции, в том числе модифицировать их.

15.10.13

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

В языке C связь между указателями и массивами настолько тесная, что рассматривать их можно только вместе.

Пусть у нас есть массив длиной 10 элементов: int a[10];

По сути это блок из 10 последовательных элементов: a[0], a[1] … a[9]

Пусть у нас есть укзатель:

int *pa; // указатель на int

15.10.13

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

Рассмотрим присваивание: pa = &a[0];

Теперь pa содержит адрес a[0];

15.10.13

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

Если pa указывает на какой либо элемент массива, то pa+1 указывает на следующий элемент, pa+i — на i-тый после pa, a pa- i на i-тый перед pa:

15.10.13