Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Все лекции программирование

.pdf
Скачиваний:
25
Добавлен:
13.03.2016
Размер:
1.94 Mб
Скачать

Лекции 6-7. Массивы и указатели

Массивы

Массив – набор однотипных компонентов (элементов), расположенных в памяти непосредственно друг за другом, доступ к которым осуществляется по индексу. В языке C все массивы располагаются в отдельной непрерывной области памяти. Первый элемент массива располагается по самому меньшему адресу, а последний – по самому большому. Массивы могут быть одномерными и многомерными.

Массивы и указатели тесно связаны. То, что может быть сказано о массивах, чаще всего непосредственно относится и к указателям, и наоборот.

Объявление массива

Общая форма объявления одномерного массива имеет следующий вид:

тип имя_переменной [размер];

Как и другие переменные, массив должен быть объявлен явно, чтобы компилятор выделил для него определенную область памяти. Здесь тип обозначает базовый тип массива, являющийся типом каждого элемента. Размер задает количество элементов массива. Пример:

double balance[100];

Доступ к элементу массива осуществляется с помощью имени массива и индекса. Индекс элемента массива помещается в квадратных скобках после имени. Например, оператор

balance[3] = 12.23;

присваивает 3-му элементу массива balance значение 12.23. Индекс первого элемента любого массива в языке C равен нулю. Поэтому оператор

char p[10];

объявляет массив символов из 10 элементов — от р[0] до р[9].

Пример

#include <stdio.h> int main(void)

{

int x[100]; /* объявление массива 100 целых */

int t;

/* присваение массиву значений от 0 до 99

*/

for(t=0; t<100; t++) x[t] = t;

/* вывод на экран содержимого x */ for(t=0; t<100; t++) printf("%d ", x[t]); return 0;

}

Выделение памяти

Объем памяти, необходимый для хранения массива, непосредственно определяется его типом и размером. Для одномерного массива количество байтов памяти вычисляется следующим образом:

количество_байтов = sizeof(базовый_тип) × длина_массива

Во время выполнения программы на C не проверяется ни соблюдение границ массивов, ни их содержимое. Программист должен сам, где это необходимо, ввести проверку границ индексов. Следующий пример программы компилируется без ошибки, однако при выполнении происходит нарушение границы массива count и разрушение соседних участков памяти:

int count[10], i;

/* здесь нарушена граница массива count */ for(i=0; i<100; i++) count[i] = i;

Строки

Одномерный массив наиболее часто применяется в виде строки символов. Строка – это одномерный массив символов, заканчивающийся нулевым символом. В языке С признаком окончания строки (нулевым символом) служит символ '\0'.

Объявляя массив символов, предназначенный для хранения строки, необходимо предусмотреть место для нуля, т.е. указать его размер в объявлении на один символ больше, чем наибольшее предполагаемое количество символов. Например, объявление массива str, предназначенного для хранения строки из 10 символов, должно выглядеть так:

char str[11];

Записанная в тексте программы строка символов, заключенных в двойные кавычки, является строковой константой. В конец строковой константы компилятор автоматически добавляет нулевой символ.

Функции работы со строками

 

<string.h>

Имя функции

Выполняемое действие

strcpy(s1,s2)

Копирование s2 в s1

strcat(s1,s2)

Конкатенация (присоединение) s2 в конец s1

strlen(s1)

Возвращает длину строки s1

 

Возвращает 0, если s1 и s2 совпадают,

strcmp(s1,s2)

отрицательное значение, если s1<s2 и

 

положительное значение, если s1>s2

strchr(s1,ch)

Возвращает указатель на первое вхождение

символа ch в строку s1

 

strstr(s1,s2)

Возвращает указатель на первое вхождение

строки s2 в строку s1

 

Пример

#include <stdio.h> #include <string.h>

int main(void)

{

char s1[80], s2[80];

scanf("%s",s1); scanf("%s",s2);

printf("Length: %d %d\n", strlen(s1), strlen(s2));

if(!strcmp(s1, s2)) printf("Strings are equal\n");

strcat(s1, s2); printf("%s\n", s1);

strcpy(s1, "Check.\n"); printf(s1);

if(strchr("Hello", 'e')) printf("'Hello' has 'e'\n"); if(strstr("Hello", "ll")) printf("YES");

return 0;

}

c:\>Example.exe Hello

Hello Length: 5 5

Strings are equal HelloHello Check.

'Hello' has 'e' YES

Двухмерные массивы

Стандартом C определены многомерные массивы. Простейшая форма многомерного массива – двухмерный массив. Двухмерный массив – это массив одномерных массивов. Объявление двухмерного массива d с размерами 10 на 20 выглядит следующим образом:

int d[10][20];

Аналогично обращению к элементу одномерного массива, обращение к элементу с индексами 1 и 2 двухмерного массива d выглядит так:

d[1][2]

#include <stdio.h>

int main(void)

{

int t, i, num[3][4];

for(t=0; t<3; t ++) for(i=0; i<4; i++)

num[t][i] = (t*4)+i+1;

for(t=0; t<3; t++) { for(i=0; i<4; i++)

printf("%3d ", num[t][i]); printf("\n");

}

return 0;

}

Пример

c:\>Example.exe 1 2 3 4 5 6 7 8

9 10 11

12