- •Функции
- •Описание функции
- •Описание функции
- •Описание функции: примеры
- •Прототип функции
- •Пример: неверное обращение
- •Пример: верное обращение к
- •Задача
- •Решение
- •Решение
- •Вызов функции
- •Вызов функции: пример
- •Передача параметров
- •Передача параметров
- •Текст программы void main()
- •Результат выполнения программы:
- •Указатели
- •Указатели
- •Указатели на объект
- •Примеры
- •Инициализация указателей
- •Операции с указателями
- •Операции с указателями
- •Операции с указателями
- •Операции с указателями
- •Операции с указателями
- •Передача параметров по адресу
- •Вызов функции
- •Передача параметров по ссылке
- •Ссылки
- •Ссылки
- •Ссылки
- •Ссылки
- •Передача параметров по cсылке
- •Вызов функции
- •Пример
- •Пример
Примеры
int I; // целая переменная
const int ci=1;// целая константа
int *pi;//указатель на целую переменную
const int *pci; //указатель на целую константу
int * const cp=&i; //указатель-константа на целую переменную
const int * const cpc=&ci;
//указатель-константа на целую константу
Инициализация указателей
Присваивание указателю адреса существующего объекта:
int a=5; // инициализируем целую переменную
int *pa=&a; // в указатель записывается адрес а
Операции с указателями
Разадресация (разыменование) – используется для получения или изменения значения по заданному адресу Обозначение: *
int x=10, y;//переменные типа int
int *px=&x; //указателю присваиваем значение адреса переменной х
y=*px; //значение y становится равным 10
Операции с указателями
int x, y;//переменные типа int
int *px=&x; //указателю присваиваем
значение адреса переменной х *px=10; //значение х становится равным 10
Операции с указателями
Арифметические операции:
Инкремент – увеличение указателя на величину sizeof(тип)
Декремент -уменьшение указателя на величину sizeof(тип):
int *p;
float *s; p++;//увеличивает p на 2 s++;// увеличивает s на 4
Операции с указателями
Разность двух указателей – это разность их значений, деленная на размер типа в байтах
int x=10,*px, y=20,*py; px=&x; py=&y;
float *a,*b;
printf(“px=%d, py=%d, px-py=%d\n”, px,py,px-py);
printf(“a=%d, b=%d, a-b=%d\n”,a,b,a-b);
Результат выполнения: px=3fff4, py=3fff2, px-py=1 a=4ff26, b=4ffe10, a-b=4
Операции с указателями
Сумма указателя и константы int *px; cout<<“px=“<<px<<endl; px=px+4; cout<<“px+4=“<<px<<endl;
Результат: px=3fff4
px+4=3fffc
Замечания:
Арифметические операции используются только для указателей одного типа
Сложение указателей не допускается
Передача параметров по адресу
Пример:
Void swap(int *a, int *b) { int temp=*a;
*a=*b;
*b=temp;
}
Вызов функции
Void main()
{ int a=10,b=2;
printf(“\n a=%d b=%d”,a,b); swap(&a,&b);
printf(\n new \n a=%d b=%d”,a,b);
}
Результат: A=10 b=2 New
A=2 b=10
Передача параметров по ссылке
Ссылка представляет собой синоним имени, указанного при инициализации ссылки
Ссылка является указателем, который всегда разыменовывается