Указатели и массивы
Автор: dkoshkodan • Сентябрь 29, 2021 • Лекция • 3,936 Слов (16 Страниц) • 226 Просмотры
«Указатели и массивы»
В языке С++ указатели и массивы имеют тесную связь друг с другом.
int arr [10];
int*address;
address=arr;
Доступ к элементам массива можно получить одним из следующих способов:
1. Индексация – доступ к элементу по индексу;
2. Адресация – адресная арифметика.
*(address+3)
Доступ к 4 элементу массива осуществляется с помощью адресной арифметики.
Массивы указателей
Можно создавать массивы указателей, помещая их в массив. Общая форма записи массива указателей выглядит следующим образом:
тип_указателей*имя_массива[размер_массива]
int*arr[5];
Можно присваивать адрес переменной типа int какому-то из элементов массива указателей.
Пример:
int variable;
arr[3] = &variable;
4 элементу массива присваивается значение этой переменной. Для того чтобы получить значение переменной variable с помощью указателя необходимо применить оператор разыменования.
Пример:
*arr[3];
Если необходимо использовать массив указателей в качестве формального параметра функции, то при объявлении и определении функции нужно указать его имя в списке параметров.
Пример:
void array_a(int *arr[]);
Массивы указателей можно инициализировать. Чаще всего массив указателей инициализируется указателями на какие-то строки.
Пишем программу:
#include <iostream>
#include<string>
int main()
{
setlocale (LC_ALL, “Russian”);
const char *e_dic[][2] =
{
“1”, “Указатель - это переменная, в которой хранится адрес другого объекта”,
“2”, “Массив - это совокупность переменных, имеющих одинаковый тип и объединенных под одним именем”,
“3”, “Функция - это подпрограмма, которая может содержать от одной до нескольких инструкций и выполнять определенную задачу”,
“”, “”
};
char w[20];
cout<<”1. Указатель”<<endl;
cout<<”2. Массив”<<endl;
cout<<”3. Функция”<<endl;
cout<<”Выберите номер слова: ”;
cin>>w;
for (int i = 0; *e_dic[i][0]; i++)
{
if (!strcmp(e_dic[i][0],w))
{
cout<<e_dic[i][1]<<endl;
break;
}
if (!*e_dic[i][0]) cout<<”Такого слова в словаре нет!”;
return 0;
}
}
}
Косвенная адресация
- это когда указатель ссылается на другой указатель, содержащей адрес переменной, имеющей конкретное значение. Указатель на указатель объявляется с использованием дополнительной звёздочки.
int**address
Косвенная адресация может быть разного уровня вложенности, однако многоуровневая вложенность практически не используется из-за трудности восприятия такой программы.
Функции
Функции в языке С++ представляют собой блоки, из которых можно выстроить программу разного уровня сложности.
Функция – это подпрограмма, которая может содержать от 1 до нескольких инструкций и выполнять определённую задачу. Функция, которая присутствует в программе всегда называется главной или основной. Программа может включать в себя единственную функцию main или функцию main и от 1 до нескольких других функций.
Общая форма записи:
тип_возвращаемого_значения имя_функии (список_формальных параметров)
{
тело функции;
}
Фрагмент программы:
void out_put (int a,int b)
{
if (a>b) cout<<”a>b”;
else if (b>a) cout<<”b>a”;
else cout<<”a=b”:
}
}
Основная функция может иметь 2 параметра: argc, argv. Данные параметры нужны, чтобы осуществить приём аргументов командной строки, но конкретная операционная система может поддерживать и другие параметры.
Параметры функции main:
argc
Представляет собой целое число, характеризующее собой кол-во аргументов, которые могут быть введены в командной строке.
argv
Представляет собой указатель на массив символьных указателей, каждой из которых является указателем на строку, содержащую аргумент командной строки. Т.к. аргументы командной строки являются символьными строками, то числовые аргументы необходимо преобразовывать в числовой формат с помощью подключения стандартной библиотеки и функций (atof, atol, atoi).
...