Int* pInt;
double df;
double* pdf=&df;
Если имеется указатель pType, то при помощи унарной операции, имеющей второй приоритет, можно получить объект, хранящийся по адресу pType. Эта операция обозначается символом * (звездочка) и называется разыменованием указателя. Ее единственным операндом является указатель, следующий за символом “*”. Таким образом, если pType – указатель на переменную Var типа Type, то *pType – объект, который хранится по адресу из pType. В соответствии с правилами, конструкция *pType может находиться везде, где разрешается находиться переменной Var, в частности слева от знака = в операции присваивания. Поэтому приводимый ниже фрагмент текста является допустимым:
// Создание объектов
int x=1, y=2;
// Создание указателя px с адресом переменной x
int* px=&x;
// Изменение значения переменной x
*px=y; // x=y
// Изменение значения указателя px
px=&y;
// Создание указателя py с адресом переменной y
int* py=&y;
// Присваивание указателю py адреса переменной x
py=&x;
// Увеличение значения переменной x.
*py+=2; // x=4
3.4 Два способа передачи параметров
Для получения в теле функции доступа к объекту требуется включить его имя или его адрес в ее список формальных параметров функции. В первом случае говорят, что функции передается сам объект, а во втором – его адрес. Принципиальное отличие этих способов доступа к объекту состоит в том, что функция, получающая адрес, может в ходе своего выполнения изменить сам объект, который находится по полученному адресу. В качестве иллюстрации этой возможности перепишем рассмотренную в предыдущем пункте функцию Change(), заменив в ней способ передачи параметров.
Пример 3.5 - Изменение значений переменных
#include <stdio.h >
// Определение функции Change()
void Change (int* px, int* py) {
// Запоминание значения переменной из p1
int Temp=*px;
// Замена значений переменных
*px=*py;
*py=Temp;
}
// Главная функция
void main(void){
int x=1, y=2;
Change(&x,&y);
printf(“x=%d\ny=%d\n”, x,y);
}
Отметим, что в теле функции операция разыменования дважды встречается слева от знака операции присваивания.
3.5 Стандартные функции printf() и scanf()
Последовательность символов алфавита, заключенная в кавычки, называется строковой константой. Символы строковой константы компилятор размещает в памяти один за другим. Для доступа к ним служит адрес первого символа, имеющий тип char*. Для того, чтобы программист мог правильно определить длину строковой константы, компилятор самостоятельно добавляет в конец последовательности символ, состоящий из восьми нулевых битов. Он называется завершающим нуль-символом и обозначается в тексте, как восьмеричная константа типа char ‘\0’. Полученных сведений о строковых константах достаточно для того, чтобы приступить к знакомству со стандартными функциями printf() и scanf(). Более подробно строковые константы будут рассматриваться в следующей главе.
Функция printf() предназначена для отображения на экране дисплея одного или нескольких объектов встроенных типов и имеет следующий прототип