Алгоритмические языки и программирование. Указатели

Содержание

Слайд 2

Часть 1

Часть 1

Слайд 3

Указатели Указатель — это переменная, содержащая адрес ячейки памяти (числовое значение).

Указатели

Указатель — это переменная, содержащая адрес ячейки памяти (числовое значение).
Память типичной

машины представляет собой массив последовательно пронумерованных(адресованных) ячеек, с которыми можно работать по отдельности или в виде массива.
Синтаксис объявления указателей:
<тип> *<имя>;
Например: float *a; long int *b;
Два основных оператора для работы с указателями – это оператор & взятия адреса, и оператор * разыменования.
Слайд 4

Указатели и адреса Оператор &(взятие адреса) применяется только к “объектам”, расположенным

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

Оператор &(взятие адреса) применяется только к “объектам”, расположенным в

памяти: к переменным и элементам массивов.
Унарный оператор *(разыменование) есть оператор косвенного доступа. Примененный к указателю, он выдает “объект”, на который данный указатель указывает.
Слайд 5

Пример #include #include void main() { int A = 100; int

Пример

#include
#include
void main() {
    int A = 100;
    int *p;
p = &A;

//Получаем адрес переменной A
    printf("%p\n", p);  //Выводим адрес переменной A
    printf("%d\n", *p); //Выводим содержимое переменной A
    *p = 200; //Меняем содержимое переменной A
    printf("%d\n", A);
    printf("%d", *p);
}
Слайд 6

Перестановка двух переменных void swap(int x, int y) /* НЕВЕРНО */

Перестановка двух переменных

void swap(int x, int y) /* НЕВЕРНО */
{
int temp;
temp

= x;
x = y;
y = temp;
}
Слайд 7

Перестановка двух переменных Чтобы получить желаемый эффект, вызывающей программе надо передать

Перестановка двух переменных

Чтобы получить желаемый эффект, вызывающей программе надо передать указатели

на те значения, которые должны быть изменены:
swap(&x, &y);
Слайд 8

Перестановка двух переменных void swap(int *px, int *py) { int temp;

Перестановка двух переменных

void swap(int *px, int *py)
{
int temp;
temp = *рх;
*рх

= *py;
*рy = temp;
}
Слайд 9

Перестановка двух переменных Аргументы-указатели позволяют функции осуществлять доступ к объектам вызвавшей

Перестановка двух переменных

Аргументы-указатели позволяют функции осуществлять доступ к объектам вызвавшей ее

программы и дают возможность изменить эти объекты.

a:

b:

px:

py:

в swap:

Слайд 10

Часть 2

Часть 2

Слайд 11

Адресная арифметика Указатели и целочисленные переменные можно складывать и вычитать. Конструкция

Адресная арифметика

Указатели и целочисленные переменные можно складывать и вычитать. Конструкция р

+ n означает адрес объекта, занимающего n-е место после объекта, на который указывает р. Это справедливо безотносительно к типу объекта(исключение void), на который указывает р; n автоматически домножается на коэффициент, соответствующий размеру объекта. Информация о размере неявно присутствует в объявлении р. Если, к примеру, int занимает четыре байта, то коэффициент умножения будет равен четырем.
Слайд 12

Указатели и массивы int a[10]; int *pa = NULL; ра =

Указатели и массивы
int a[10];
int *pa = NULL;
ра = &а[0]; /* будет

указывать на нулевой элемент а, иначе говоря, pa будет содержать адрес элемента а[0].*/
х = *ра; // копирует содержимое а[0] в х.
*(pa+1) ; // возвращает первый элемент массива

a:

a[0]

a[1]

a[2]

a[3]

a[4]

a[5]

a[6]

a[7]

a[8]

a[9]

pa:

pa+1

pa+2

Слайд 13

Нулевой элемент массива и адрес /* ра и а имеют одно

Нулевой элемент массива и адрес

/* ра и а имеют одно и

то же значение. */
ра = &а[0];
/* Поскольку имя массива является синонимом расположения его
начального элемента, присваивание ра=&а[0] можно также записать в следующем виде: */
pa = a;
// а[i] можно записать как *(а+i)
Слайд 14

Адресная арифметика Важно помнить что следующее операции опасны: Использовать арифметические операции

Адресная арифметика

Важно помнить что следующее операции опасны:
Использовать арифметические операции с указателями

ссылающимися не на массив.
Арифметические операции между указателями на разные массивы.
Выход за пределы массива(начало и конец) используя адресную арифметику.
Слайд 15

Длина строки /* strlen: возвращает длину строки */ int strlen(char *s)

Длина строки

/* strlen: возвращает длину строки */
int strlen(char *s)
{
int n;
// увеличение

на 1 некоторой копия указателя, находящегося в личном пользовании функции strlen.
for (n = 0; *s != '\0' ; s++)
n++;
return n;
}
Слайд 16

Длина строки /* все вызовы правомерны */ strlen("3дравствуй, мир"); /* строковая

Длина строки

/* все вызовы правомерны */
strlen("3дравствуй, мир"); /* строковая константа */
char

array[100];
strlen(array); /* char array[100]; */
char * prt = NULL;
strlen(ptr); /* char *ptr; */
Слайд 17

Длина строки /* strlen: возвращает длину строки s */ int strlen(char

Длина строки

/* strlen: возвращает длину строки s */
int strlen(char *s)
{
char *p

= s;
while (*p != '\0' )
p++;
return p - s;
}
Слайд 18

Символы и строки в С

Символы и строки в С

Слайд 19

Символы и строки в С Подробнее на сайте: http://cppstudio.com/post/437/

Символы и строки в С

Подробнее на сайте: http://cppstudio.com/post/437/

Слайд 20

Лабораторные работы

Лабораторные работы

Слайд 21

Указатели Создайте и заполните массив из 10 элементов, числами от 100

Указатели

Создайте и заполните массив из 10 элементов, числами от 100 до

110. Напишите программу, которая будет выводить адреса элементов массива. Проанализируйте как меняются адреса элементов массива.

Примечание:
Использовать циклы;
Использовать указатели;

Слайд 22

Строки Напишите программу, вычисляющую количество символов в строке. Примечание: Использовать указатели Использовать циклы

Строки

Напишите программу, вычисляющую количество символов в строке.

Примечание:
Использовать указатели
Использовать циклы

Слайд 23

Среднее арифметическое последовательности чисел Напишите функцию для нахождения среднего арифметического последовательности

Среднее арифметическое последовательности чисел

Напишите функцию для нахождения среднего арифметического последовательности чисел,

если известно, что признак конца списка (цифра '0').

Примечание:
Использовать указатели
Использовать циклы
Использовать функции