Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lab1-13.doc
Скачиваний:
19
Добавлен:
12.05.2015
Размер:
174.08 Кб
Скачать

3.4. Операции над указателями

Для указателей допустимы следующие операции:

  • присваивание значения указателя другому указателю того же типа;

  • присваивание указателю значения NULL;

  • операция адресации;

  • операция раскрытия ссылки (косвенной адресации);

  • сложение и вычитание указателя и целого выражения;

  • сложение, вычитание и сравнение двух указателей, ссылающихся на элементы одного и того же массива;

  • сравнение значения указателя со значением NULL.

Оператор присваиванияприсваивает значение одного указателя другому указателю, либо присваивает указателю значениеNULL.

Оператор адресации"&" выдает адрес переменной или элемента массива.

Оператор раскрытия ссылкииликосвенной адресации"*" выдает объект, на который ссылается данный указатель.

Операторы "&" и "*" имеют тот же приоритет, что и операторы "++" и "--", т.е. более высокий приоритет, чем арифметические операторы.

В языке Cсуществует сильная взаимосвязь между указателями и массивами. Любую операцию, которую можно выполнить с помощью индексов массива, можно сделать и с помощью указателей, причем вариант с указателями обычно оказывается более быстрым.

Для указателей определены операции сложения с целой величинойи вычитания целой величины.

Если указатели указывают на элементы одного и того же массива, то для них можно использовать операции отношения, а такжесложенияивычитания.

Любой указатель можно также сравнить на равенство или неравенство сNULL.

3.5. Оператор форматного ввода

Осуществляющая ввод функция scanf()является аналогом функцииprintf()и позволяет проводить в обратном направлении многие из преобразований, осуществляемых при выводе переменных. В результате ввода с клавиатуры в программу вводится символьные данные, поскольку и числа и буквы и другие символы клавиатуры мы вводим именно как символы. Однако введенную последовательность символов, например, "110", в программе надо представить в программе как числовое данное, а не как строку символов. Функцияscanf()и осуществляет перевод вводимых строк в различные формы: целые числа, числа с плавающей точкой, символы и строки. Функция имеет переменное число аргументов и вызывается следующим образом:

scanf(строка-формата [, аргумент-1 [, аргумент-2....]])

где строка-формата – символьная строка, состоящая из обычных символов, специальных символов и, если за строкой формата следует один или несколько аргументов, спецификаций полей формата ввода (по одному для каждого аргумента).

Управляющая строка может содержать:

  • пробелы, табуляции или символы новой строки, которые игнорируются;

  • обычные символы (не символ "%"), которые предполагаются совпадающими со следующими отличными от символов пустых промежутков символами входного потока;

  • спецификации преобразования, начинающиеся с символа "%".

Простая спецификация формата содержит только символ "%" и символ вводимого типа. Основные символы типов приведены в следующей таблице:

Символ

типа

Тип

аргумента

Данные на вводе

d

int

Десятичное число.

i

int

Целое: восьмеричное (с ведущим нулем) или шестнадцатеричное (с ведущими 0xили0X).

u

int

Десятичное число без знака.

o

int

Восьмеричное целое (с 0в начале числа или без него).

x

int

Шестнадцатеричное целое (с 0xили0Xв начале или без них).

c

char

Единичный символ. Пробельные символы здесь рассматриваются как обычные символы.

s

char *

Символьная строка.

e, f, g

float

Десятичное число (возможно со знаком, десятичной точкой и экспонентой).

p

указатель

Значение указателя.

n

указатель на целое

В целое число, адрес которого указывается в качестве аргумента, записывается число символов, прочитанных к текущему моменту для данной функции scanf().

[...]

char *

Строка читается до первого символа, который не встречаетсяв скобках.

[^...]

char *

Строка читается до первого символа, который встречаетсяв скобках.

%

нет

Выводится символ "%".

Если число спецификаций формата больше числа аргументов, излишние спецификации игнорируются. В обратном случае результат ввода не определен.

В качестве аргументов задаются адресавводимых переменных.

Выполнение функции scanf()заканчивается либо тогда, когда она исчерпывает свою управляющую строку, либо когда некоторый элемент ввода не совпадает с управляющей спецификацией. В качестве своего значения она возвращает число правильно совпадающих и присвоенных элементов ввода. Это число может быть использовано для определения количества найденных элементов ввода. При выходе на конец файла возвращаетсяEOF. При следующем обращении кscanf()поиск возобновляется непосредственно за последним введенным символом.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]