Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Билеты по проге.docx
Скачиваний:
8
Добавлен:
01.07.2025
Размер:
630.61 Кб
Скачать

Указатели

Указатель — это переменная, значением которой является адрес некоторого объекта (обычно другой переменной) в памяти компьютера. Переменная, содержащая адрес другой переменной. Отдельные операции можно сделать только с их помощью, или позволяют более компактно записать код. Стандартное объявление нетипизированного указателя – void * . Используются в тех случаях , когда нужно иметь прямой доступ к памяти.

Объявление: тип *имя; Тип указателя определяет тип объекта, на который указатель будет ссылаться.

Операция & (унарная) даёт адрес объекта. Помещение адреса переменной типа char с в переменную ( указатель) р :

p = &c. Операция применима к объектам оперативной памяти, нельзя использовать для констант и выражений.

Операция * - операция ссылки по указателю (разыменовывания). Ip = &x(x=1). Y = *ip = 1.

Указатели и аргументы функций – чтобы в вызываемой функции изменить значения, передать указатели на переменную. Swap (&a,&b) – void swap(int *x, int *y) { int temp ; temp = *x; *x = *y; *y = temp;}

Массивы

Массив — это набор переменных одного типа, имеющих одно и то же имя. Доступ к конкретному элементу массива осуществляется с помощью индекса.

Объявление: тип имя_переменной [размер];

Одномерный массив — это список, хранящийся в непрерывной области памяти в порядке индексации. Ниже - как хранится в памяти массив а, начинающийся по адресу 1000 и объявленный как int a[8]; Элемент a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7]

Адрес 1000 1001 1002 1003 1004 1005 1006 1007

Запись а[i] означает i-тый элемент массива.

Связь между указателями и массивами

Int a[10]; int *pa;

Pa = &a[0]- указатель указывает на нулевой элемент массива, содержит адрес а0.

X = *pa. копирует содержимое элемента а0 в х.

Ра+1 указывает на следующий, +I – на итый элемент после ра. *(pa+1) – равно содержимому а1 элемента.

Pa = &a0 или ра = а.

Выражение в виде обращения к массиву по индексу эквивалентно ссылке по указателю со смещением. Pa[i]= *(pa+i). Указатель является переменной (ра = а, pa++), но нельзя (a=pa и a++).

Представление в эвм

* - взять значение по некоторому адресу

*(&x)=x &(*x)=x

Выражение &а позволяет получить адрес участка памяти, выделенной на машинном уровне для переменной а. Операция & применима только к объектам, имеющим имя и размещенным в памяти. Ее нельзя применять к выражениям, константам, битовым полям структур, регистровым переменным или внешним объектам, с которыми может взаимодействовать программа.

Указатель может ссылаться на объекты того типа, который присутствует в определении указателя. Исключение: указатели, в определении которых использован тип void – отсутствие значения. Такие указатели могут ссылаться на объекты любого типа, но к ним нельзя применять операцию разыменования «*».

Создание указателя на массив

Указатель на 1-й элемент массива можно создать путем присваивания ему имени массива без индекса. Например, если есть объявление

int *p;

int sample[10];

p = sample;

В обеих переменных (р и sample) хранится адрес 1-го элемента, отличаются эти переменные только тем, что значение sample в программе изменять нельзя. Адрес первого элемента можно также получить, используя оператор получения адреса &. Выражения sample и &sample[0] имеют одно и то же значение.