Слайд 1Массивы и указатели
Прико П.А.
Слайд 2Указатели и адресация
«Указатель — переменная, содержащая адрес объекта. Указатель не несет информации
о содержимом объекта, а содержит сведения о том, где размещен объект».
Источник: [1]
Слайд 3Указатели и адресация
«Каждая переменная в памяти имеет свой адрес - номер
первой ячейки, где она расположена, а также свое значение».
Источник: [1]
Слайд 4Указатели и адресация
«Указатель — это тоже переменная, которая размещается в памяти.
Она тоже имеет адрес, а ее значение является адресом некоторой другой переменной».
Источник: [1]
Слайд 5Указатели и адресация
«Переменная, объявленная как указатель, занимает 4 байта в оперативной
памяти (в случае 32-битной версии компилятора)».
Источник: [1]
Слайд 6источник: [1]
int a, *b;
a = 134;
b = &a;
Слайд 7Шаблон
тип *ИмяОбъекта;
char *p;
Тип указателя— это тип переменной, адрес которой
он содержит».
Источник: https://prog-cpp.ru/c-pointers/
Слайд 8*
* Операция «звездочка» -- получить значение объекта по его адресу
сhar c; //
переменная
char *p; // указатель
Источник: [1]
Слайд 9&
& - операция «амперсанд» -- получить адрес переменной
сhar c; // переменная
char *p; // указатель
p
= &c; // p = адрес c
Источник: [1]
Слайд 10Указатели как аргумент функции
void swap(int х, int у) {
int temp;
temp = х; x = y; у = temp;
}
swap(a, b); //не получится
swap(&a, &b); // правильно
void swap(int *px, int *py) {
int temp; temp = *рх; *рх = *py; *ру = temp;
}
Источник: [2]
Слайд 11Массивы
Массив – структура данных, представляющая собой набор элементов одного типа, компактно
размещенный в памяти.
double vector_a[10];
//vector_a[0] – указатель на начальный элемент массива
double vector[10] = {1,2,3,4,8,1,3,0,7,9};
Элементы массива нумеруются с нуля!
double x = vector[4]; // x равно 8
double y = vector[10]; // ошибка!
Слайд 12Двумерный массив
double matrix_a[4][5];
double matrix[4][5]={ 1,2,3,4,5,
2,3,4,5,6,
3,4,5,6,7,
1,3,5,7,9};
Слайд 13Отношение указателей и массивов
int A[5] = {1, 2, 3, 4,
5};
Массив хранит адрес, откуда начинаются его элементы
A[3] эквивалентно *(A + 3)
Слайд 14Массивы как аргументы функций
Массив всегда передается по ссылке! (Копирование потребовало бы
расход памяти)
int zamena (int vec[10], int i, int k) {
for (int j = 0; j < 10; j++) {
if (j % k == 0) {
vec[j] = vec [i];
}
}
}
int main() {
int vector[10] = {1,2,3,4,5,6,7,8,9,10};
zamena (vector, 1, 3);
return 0;
}
Слайд 15Массив указателей их использование и инициализация
«Можно создавать массивы указателей. Для
объявления массива целочисленных указателей из десяти элементов следует написать:
int *х[10];
Для присвоения адреса целочисленной переменной var третьему элементу массива следует написать:
х[2] = &var;
Для получения значения var следует написать:
*х [2] ».
Источник: [3]
Слайд 16Массив указателей их использование и инициализация
«Если необходимо передать массив указателей
в функцию, можно использовать метод, аналогичный передаче обычных массивов. Просто надо вызвать функцию с именем массива без индексов. Например, функция, получающая массив х, должна выглядеть следующим образом:
void display_array(int *q[])
{
int t;
for (t=0; t<10; t++) {
printf ("%d ", *q[t]);
}
».
Источник: [3]
Слайд 17Массив указателей их использование и инициализация
«Надо помнить, что q -
это не указатель на целое, а массив указателей на целые. Следовательно, необходимо объявить параметр q как массив целых указателей. Он не может объявиться как простой целочисленный указатель, поскольку он не является им».
Источник: [3]
Слайд 18Строки и строковые функции
Строки в С++ представляются как массивы элементов типа
char, заканчивающиеся нуль-терминатором \0 называются С строками или строками в стиле С.
\0 — символ нуль-терминатора.
Символьные строки состоят из набора символьных констант заключённых в двойные кавычки. При объявлении строкового массива необходимо учитывать наличие в конце строки нуль-терминатора, и отводить дополнительный байт под него.
Источник: [4]
Слайд 19Строки и строковые функции
char string[10];
char string[10] = "abcdefghf"; //9 букв и
\0
char string[10] = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'f', '\0'};
Источник: [4]
Слайд 21Список использованных источников
1. https://prog-cpp.ru/c-pointers/
2. http://cpp.com.ru/kr_cbook/ch5kr.html#p52
3. http://www.c-cpp.ru/books/massivy-ukazateley
4. http://cppstudio.com/post/437/