Similar presentations:
Массивы и указатели
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]
20. Строковые функции <string.h >
Строковые функции <string.h >Функция
Описание
char *strcat(char *s1, char *s2)
присоединяет s2 к s1, возвращает s1
char *strncat(char *s1, char *s2, int n)
присоединяет не более n символов s2 к s1, завершает строку
символом '\0', возвращает s1
char *strсpy(char *s1, char *s2)
копирует строку s2 в строку s1, включая '\0', возвращает s1
char *strncpy(char *s1, char *s2, int n)
копирует не более n символов строки s2 в строку s1, возвращает
s1;
int strcmp(char *s1, char *s2)
сравнивает s1 и s2, возвращает значение 0, если строки
эквивалентны
int strncmp(char *s1, char *s2, int n)
сравнивает не более n символов строк s1 и s2, возвращает
значение 0, если начальные n символов строк эквивалентны
int strlen(char *s)
возвращает количество символов в строке s
char *strset(char *s, char c)
заполняет строку s символами, код которых равен значению c,
возвращает указатель на строку s
char *strnset(char *s, char c, int n)
заменяет первые n символов строки s символами, код которых
равен c, возвращает указатель на строку s
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/