
- •1. Структура программы
- •Int main ( )
- •2.Тип данных
- •3. Переменная
- •5.Математические операции
- •6. Присваивание(Меншіктеу)
- •7. Инкремента и декремента.
- •Int main(){
- •8. Операторы отношения (сравнения) и логические
- •9. Массив?
- •10.Двумерный массив
- •11. Массивы неопределенной длины
- •12. Строки
- •13. Стандартные функций со строками
- •14. Указатель
- •Int main()
- •15.Массивы указателей. В чем заключается связь массивов и указателей?
- •Int main()
- •Int main()
- •Int main()
- •Int main()
- •17. If..Else
- •18. Тернарный условный оператор
- •19. Switch
- •Int main()
- •21) While
- •22. Do. .While
- •Int main()
- •23. Continue и break
- •24. Функция
- •25. Прототип функции
- •Int main()
- •Int main()
- •Int main()
14. Указатель
— это переменная, содержащая адрес памяти другой переменной. Общая форма объявления переменной-указателя такова:тип * имя-переменной;
Здесь тип — это базовый тип указателя. Базовый тип определяет, на данные какого типа будет указывать этот указатель. имя-переменной - это имя переменной-указателя. Так, чтобы объявить ip, как указатель на int, вы должны написать:int *ip;
Поскольку базовым типом ip указан int, этот указатель можно использовать только для указания на переменные типа int.
Теперь объявим указатель на float: float *fp;
В этом случае базовым типом fp является float, и указатель fp может указывать только на переменные типа float.
Операторы указателей
Для использования с указателями предусмотрены два специальных оператора: * и &. Оператор & возвращает адрес памяти, в которой расположен его операнд. Например, предложение ptr = &total;
помещает в ptr адрес памяти, где находится переменная total. Этот адрес является адресом ячейки памяти, в которой хранится переменная total. Этот адрес не имеет ничего общего со значением total. Про операцию & можно сказать, что она возвращает адрес переменной, перед которой она указана. Таким образом, приведенное выше предложение присваивания можно передать словами, как "ptr получает адрес total". Чтобы лучше разобраться в этом присваивании, предположим, что переменная total расположена по адресу 100. Тогда после выполнения присваивания ptr будет иметь значение 100.
Второй
оператор, *,
в некотором роде обратный по отношению
к &.
Этот оператор возвращает значение
переменной, расположенной по адресу,
который указан в качестве операнда
этого оператора. Продолжая тот же
пример, если ptr
содержит
адрес переменной total,
то предложение
val = *ptr;
поместит значение переменной total в val. Если, например, total первоначально имела значение 3200, то val будет теперь иметь то же значение 3200, потому что это значение, которое хранится в памяти по адресу 100, т. е. по адресу, который присвоен переменной ptr. Операцию * можно назвать "по адресу". Таким образом, последнее предложение можно передать словами, как "val получает значение, расположенное по адресу ptr".
Int main()
{
int total;
int *ptr;
namespace std;
Приведенная
ниже программа выполняет последовательность только что описанных операций:
#include <iostream>
using
int val;
total = 3200; // присвоим total значение 3200
ptr = &total; // получим адрес total
val = *ptr; // получим значение по этому адресу
cout << "total равно: " << val << '\n';
return 0 ;
}
15.Массивы указателей. В чем заключается связь массивов и указателей?
Взаимосвязь массивов и указателей
Если мы имеем определение массива:
int ia[] = { 0, 1, 1, 2, 3, 5, 8, 13, 21 };
то что означает простое указание его имени в программе?
ia;
Использование идентификатора массива в программе эквивалентно указанию адреса его первого элемента:
ia;
&ia[0]
Аналогично обратиться к значению первого элемента массива можно двумя способами:
// оба выражения возвращают первый элемент
*ia;
ia[0];
Чтобы взять адрес второго элемента массива, мы должны написать:
&ia[1];
Как мы уже упоминали раньше, выражение
ia+1;
также дает адрес второго элемента массива. Соответственно, его значение дают нам следующие два способа:
*(ia+1);
ia[1];
Отметим разницу в выражениях:
*ia+1
и
*(ia+1);
Операция разыменования имеет более высокий приоритет, чем операция сложения (о приоритетах операций говорится в разделе 4.13). Поэтому первое выражение сначала разыменовывает переменную ia и получает первый элемент массива, а затем прибавляет к нему 1. Второе же выражение доставляет значение второго элемента.
Проход по массиву можно осуществлять с помощью индекса, как мы делали это в предыдущем разделе, или с помощью указателей. Например:
#include <iostream>