Программирование >>  Программирование на языке c++ 

1 ... 150 151 152 [ 153 ] 154 155 156 ... 159


char b[5]; массив из 5 элементов символьного типа

Двухмерный массив представляется как одномерный, элементы которого тоже массивы. Например, объявление float[3][4] задает такой массив. По аналогии можно описать и большее число измерений. Имя массива - это константа, которая содержит адрес его первого элемента.

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

int а[5];

определяет массив из пяти элементов: а[0], а[1], а[2], а[3], а[4]. Если указатель у объявлен как

int *у;

то оператор у=&а(2]; присваивает указателю у адрес элемента а[2]. В этом случае указатель у+1 адресует элемент а[3], а указатель у-1 адресует элемент лЩ. Здесь автоматически выполняется соответствующее масштабирование для приращения адреса с учетом длины (размера) объекта. Поскольку а - это адрес первого элемента массива, то значения его элементов можно получить и так: *а, *(а+1), *(а+2), *(а+3), *(а-1-4). Пусть задан трехмерный массив:

long а[2][3][2]; объявление long а эквивалентно объявлению long int а

На рис. П.1 показаны различные способы обращения к элементам этого массива. Здесь стрелка, которая указывает на границу прямоугольника, задает адрес соответствующего элемента, а стрелка, указывающая на внутренний элемент, - значение соответствующего элемента.

Между именем массива и соответствующим указателем есть одно важное различие. Указатель - это переменная и у=а; или у+-1-; - допустимые операции. Имя же массива - константа, поэтому конструкции вида а=у; а++; использовать нельзя, так как значение константы постоянно и не может быть изменено.

Язык С позволяет инициализировать массив при объявлении. Для этого используется следующая форма:



ТИП имя массива[...]...[...] = { список значений };

Рассмотрим пример:

char с[2][3] = { a,b/c/d,e/f };

Теперь: с[0][0]=а; с[0][1]=Ь; с[0][2]=с; c[l][0]=d; с[1][1]=е; с[1][2]=Т (в массивах быстрее изменяются правые индексы).

В языке допускаются массивы указателей, которые объявляются, например, следующим образом:

char *m[5];

Здесь m - массив, содержащий адреса элементов типа char.

Язык С не поддерживает отдельный строковый тип данных, но он позволяет определить строки двумя различными способами. В первом используется массив символов, а во втором - указатель на первый символ массива.

1.8. Структуры и объединения. Они задаются ключевыми словами struct и union и используются для описания новых типов данных.

1.9. Спецификатор typedef. Этот спецификатор применяется для объявления идентификатора, который позже можно использовать как имя базового или производного типа. Он задается в виде

typedef известный тип новое имя;

Применение этого спецификатора рассмотрим на примерах.

typedef int i, *j;

Здесь задается новое имя i для типа int и новое имя j для указателей на тип int. Теперь можно, например, задать следующие объявления:

i а=3; объявление и инициализация цепой переменной а

j к=&а; объявление и инициализация указателя к

Следующая строка тоже является правильной:

typedef i i; здесь задается новое имя i для типа i

Рассмотрим другие примеры:

typedef char *str; тип str - указатель на символ typedef struct s *р; тип р - указатель на структуру s typedef struct s { /* ... */} ttt; тип ttt - это

структура s



а[1][2] а[1][1] а[1] а[1][0]

*(а[1][0]+4)

*(*а[1]+4) +/-++

*(а[1][0]+5) *(*а[1]+5)

(**а+10) *(**а+11)

а[1][2][0]

а[1][2][1]

а[1][1][0]

afiimrii

atl][0][0]

а[1][0][1]

*(а[1][0]+3) *(*а[1]+3)


а+9)

*(aIl][0]+2) *(*а[1]+2) *(**а+8)

а[0][2] а[0][1]

а[0] а[0][0]

а[0][2][0]

а[0][2]т

а[0][1][0]

а[0][1][1].

а[0][0][0]

а[0][0][1]

*(а[0][0])

*(а[0][0]+1)

*(*а[0])

*(*а[0]+1)

***а

*(**а+1)

*(а[0][0]+3) *(*а[0]+3) *(**а+3)

*(а[0][0]+2) *(*а[0]+2) *(**а+2)

Рис. п. 1. Различные способы адресации и обращения к элементам массива

typedef int (*f)(char,int); тип f - указатель на

функцию с двумя аргументами типов char и int typedef char (*аа)[10][20]; тип аа - указатель на

двухмерный массив элементов типа char Теперь можно рассмотреть такие объявления: str ss; ss - указатель на символ Р fTiV-PCp) new (ttt); выделенная память присваивается ту р

f funi, fun2; funi и fun2 - указатели на функции аа al; al - указатель на двухмерный массив типа char 1.10. Функции. Все функции языка С (не С++) являются глобальными. Запрещено определять одну функцию внутри другой. Связь между функциями осуществляется через аргументы, возвращаемые значения и глобальные (внешние) перемен-



1 ... 150 151 152 [ 153 ] 154 155 156 ... 159

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика