// Done by TheTutor -- 06/01/01
// Перевод © 2004 Евгений Казеко
// www.gamecoder.kazeko.com
// evgeniy@kazeko.com
/* Что такое массив? Массив можно представить себе как набор переменных
в одной переменной. Например:
Мы можем представить имя Sue вот так:
char letter1 = 'S';
char letter2 = 'u';
char letter3 = 'e';
Затем, печатая каждую букву мы получим "Sue"
printf("%c%c%c\n",letter1,letter2,letter3);
Но вместо этого мы можем использовать символьный массив
char name2[4] = "Sue";
printf("%s\n",name2);
////////////////////////////////////////////
Рассмотрим name --
name[0] = 'S'
name[1] = 'u'
name[2] = 'e'
name[3] = NULL Каждый символьный массив должен заканчиваться нулевым (NULL) символом
Не знаете, что такое нулевой символ? Просто думайте о нем как
о способе сказать "Последовательность символов заканчивается здесь"
Каждый массив состоит из элементов. name[0] является элементом массива name, name[1]
также элемент name и name[2] также элемент массива name.
Обратите внимание на то, что первый элемент массива имеет индекс 0. Индекс это всего
лишь позиция в массиве. Например
name[] = "Carlos" Если не указывать число элементов, такое объявление создаст
массив нужной длины. По одному элементу для каждой буквы и
завершающий NULL символ. Таким образом, общая длина name составит
7 элементов. Мы покажем это в программе.
'r' имеет в массиве индекс 2 - не забывайте, первый индекс массива всегда ноль.
А теперь приступим к программе
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h> // Содержит определение функции strlen()
#define SHOW_ANSWERS 0 /* Чтобы увидеть "ответы" (то, что будет печататься на экране)
просто замените ноль на 1 - Однако, я настоятельно рекомендую
сперва посмотреть на программу и написать на бумаге то, что,
как вы предполагаете, будет напечатано, это отличный способ
обучения */
int main()
{
char name[] = "Carlos"; // массивы могут быть не только типа char -- они могут быть типа
// int, double, типа, определенного пользователем и т.д.
int numbers[] = {0,1,2,3,4,5,6,7,8,9}; // int, double, и другие типы данных
// отличаются от char тем, что они НЕ имеют
// завершающего NULL символа.
// Сперва, покажем что длина name 7 элементов
// Функция strlen() возвращает длину символьной строки
printf("name[] length = %d\n\n\n",strlen(name));
// Если вы запускали эту программу, вы заметили, что она напечатала 6 --
// "Но вы же сказали, что длина name 7 элементов???"
// Измените программу так, чтобы первая строка была следующей:
// char name[6] = "Carlos";
/* Слово "Carlos" состоит из 6 букв, поэтому программа должна работать, верно?
Вы увидите, что это приведет к неожиданным результатам, программа не скомпилируется,
или она может сказать, что длина "Carlos" 62 (или другое число). Это
полностью зависит от операционной системы - Причина в изменении на строку
char name[6] = "Carlos", при этом массив будет иметь 6 элементов.
В массиве не будет места для завершающего NULL символа, который всегда
ОБЯЗАН быть в символьных массивах -- Поэтому запомните: strlen() возвращает
длину строки (символьного массива) минус завершающий NULL символ. */
/*
Ниже мы проделаем с массивом несколько операций.
Не забудьте установить SHOW_ANSWERS равным 1 чтобы увидеть, что будет
напечатано, но сперва проведите расчеты на бумаге :)
*/
if(SHOW_ANSWERS)
{
printf("%s\n",name);
printf("%c\n\n",name[3]);
}
name[3] = name[2];
if(SHOW_ANSWERS)
printf("%s\n\n",name);
name[5] = 't';
if(SHOW_ANSWERS)
printf("%s\n\n",name);
name[3] = '\0'; // '\0' является эквивалентом NULL
if(SHOW_ANSWERS)
printf("%s\n\n",name);
// А теперь напечатаем значения из числового массива
printf("numbers[2] = %d\n",numbers[2]);
if(SHOW_ANSWERS)
printf("%d\n",numbers); // Как вы думаете, что это делает?
// Массивы, на уровне компьютера, представляют собой последовательность
// блоков в памяти, имеющих определенную длину -- Это выражение
// напечатает адрес памяти первого элемента массива
return EXIT_SUCCESS; // EXIT_SUCCESS это заранее определенное число, говорящее
// операционной системе, что во время работы программы не возникло никаких проблем.
}
// © 2001 GameTutorials
// Перевод © 2004 Евгений Казеко
// www.gamecoder.kazeko.com
// evgeniy@kazeko.com
|