Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
3_Функции.doc
Скачиваний:
4
Добавлен:
10.02.2015
Размер:
235.52 Кб
Скачать

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() предназначена для отображения на экране дисплея одного или нескольких объектов встроенных типов и имеет следующий прототип