- •Оператор goto.
- •Использование goto.
- •Оператор exit().
- •Оператор atexit().
- •Массивы.
- •Понятие массив.
- •Массивы в с.
- •Объявление массивов.
- •Проблема ввода.
- •Инициализация массивов.
- •Инициализация по умолчанию.
- •Инициализация безразмерных массивов.
- •Доступ к элементам массива.
- •Инициализация массивов и классы памяти.
- •Вычисление размера массива (sizeof()).
- •Выход индекса за пределы массива.
- •Ввод и вывод строк.
- •Многомерные массивы.
- •Инициализация двумерного массива.
- •Массивы в качестве аргументов функций.
- •Передача массивов функциям с.
- •Строковые функции и символьные массивы.
- •Функции gets(), puts(), fgets(), fputs() и sprintf().
- •Определение переменных-указателей.
- •Объявление переменных-указателей.
- •Простые операторы с указателями.
- •Инициализация указателей.
Ввод и вывод строк.
Хотя в С и имеется тип данных char, в нем отсутствует тип данных для символьных строк. Вместо этого строка должна быть представлена в виде массива символов. Каждый символ строки хранится в отдельной ячейке массива, а в последней ячейке содержится null-символ \0.
В следующей программе показаны три основных способа представления и обработки символьной строки. Массив szmode1 инициализируется посимвольно при помощи операции присваивания, массив szmode2 инициализируется при помощи функции scanf(), а массив szmode3 инициализируется при описании.
// 09STRING.CPP
// В этой программе на C++ показано использование строк
main()
{
char szmode1[4], //car
szmode2[6]; //plane
staticchar szmode3[5]="ship"; //ship
szmode1[0]='c';
szmode1[1]='a';
szmode1[2]='r';
szmode1[3]='\0';
printf("\n\n\tPliase enter the mode --> plane ");
scanf("%s",szmode2);
printf("%s\n",szmode1);
printf("%s\n",szmode2);
printf("%s\n",szmode3);
}
Хотя строка в массиве szmode1, "car", имеет три символа, сам массив szmode1 имеет четыре элемента — по одному на символ и еще один для null-символа. Запомните: \0 считается одним символом. Аналогичным образом, строка "plane" содержит пять символов (в строке "ship" — четыре), но требует для хранения шесть ячеек (пять для szmode3), включая null-символ. Напоминаем, что массив символов szmode3[5] можно также инициализировать, используя для этого вариант записи с фигурными скобками:
static char szmode3[5] = {'s','h','i','p','\0'};
Когда при перечислении начальных значений символов массива используются двойные кавычки, компилятор автоматически добавляет null-символ окончания строки \0. Кроме того, эта строка может быть записана следующим образом:
static char szmode3[] = "ship";
Здесь используется безразмерный массив. Конечно, для инициализации символьного массива можно выбрать и более длинный способ, такой как для массива szmode1. Чаще для считывания строки непосредственно в массив используется функция scanf(), как это было сделано с массивом szmode2. В функции scanf() используется спецификация преобразования %s. В этом случае функция пропускает разделительные символы (символы пробела, табуляции и возврата каретки) и считывает в символьный массив szmode2 все символы до следующего разделительного. Затем автоматически добавляется null-символ. Размер массива должен быть указан достаточно большим для размещения всей строки с null-символом. Взгляните еще раз на этот оператор:
scanf("%s",szmode2);
Многомерные массивы. Инициализация двумерного массива.
Многомерные массивы.
Понятие "размерность" относится к количеству индексов, используемых для обращения к отдельному элементу массива. Глядя на объявление массива, можно определить его размерность. Если в объявлении только одна пара квадратных скобок([]), то массив — одномерный; если две пары ([][]), то двухмерный, и так далее. Массивы, имеющие более одного измерения, называются многомерными. Для моделирования пространства максимальное число измерений обычно равно 3.