Конспект лекций по информатике и информационным технологиям

140 5. Как выполнить ввод переменных х н у , где х типа long int, а у типа double с помо­ щью функции scanf? С помощью операции » ? 12. Указатели и функции 12.1.Указатели Указатель - это переменная, значением которой является адрес. То есть это такая переменная, в которой можно сохранить адрес какой-то другой переменной. Если более точно, то указатель хранит адрес ячейки памяти, в которой содержится значение другой переменной. Так же как переменные различаются типами, указатели тоже бывают разными. Так при объявлении указателя обязательно задается, на переменную какого типа это указа­ тель. То есть, по сути - адрес переменной какого типа будет содержаться в этом указателе. Переменная, хранящая адрес, должна быть объявлена как указатель. Объявление указателя состоит из имени типа той переменной, адрес которой хранится в указателе, символа и имени указателя: тип *имя_указателя; Рассмотрим пример. Чтобы объявить переменную р указателем на переменную це­ лого типа необходимо использовать следующую инструкцию int *р; Для объявления указателя q на тип float необходимо написать float *q; В общем случае использование символа "звездочка" (*) перед именем переменной при ее объявлении превращает эту переменную в указатель. С указателями используются два оператора: "*" и "&". Оператор "&", стоящий перед именем переменной, возвращает адрес этой пере­ менной. Например, при выполнении следующего фрагмента кода int balance = 100; int *ptr; ptr = &balance в переменную ptr помещается адрес переменной balance. Этот адрес соответствует облас­ ти памяти компьютера, которая принадлежит переменной balance. Выполнение этой инст­ рукции никак не влияет на значение переменной balance. Назначение оператора "&" мож­ но выразить фразой "получить адрес переменной". Оператор "*" ставится непосредственно перед указателем. Он обозначает обраще­ ние к значению переменной, адрес которой содержит данный указатель. Если в продолже­ ние предыдущего фрагмента написать int value; value = *ptr; то переменной value будет присвоено значение переменной balance. Т.е. после выполне­ ния последнего оператора переменная value будет содержать значение 100. Действие опе­ ратора "*" можно выразить фразой "значение, расположенное по адресу". В данном случае последний оператор можно прочитать так: "переменная value получает значение, распо­ ложенное по адресу ptr". Переменные-указатели должны всегда указывать на данные соответствующего ти­ па. Несоблюдение этого условия может привести к ошибке. Например, следующий фраг­ мент кода некорректен int *р;

RkJQdWJsaXNoZXIy MTY0OTYy