Pers.narod.ru. Обучение. Лекции по Си. Глава 6

6. Статические массивы

 

Массив объявляется одним из следующих способов:

тип идентификатор [константное выражение];

тип  идентификатор [] = {список элементов};

Элементы списка перечисляются через запятую, в этом случае размерность массива определяется по фактически указанному количеству элементов. Примеры:

int x[10];

float a[]={3.5,4.5,5.5}; //размерность=3

char div[3]={' ','\n','\t'};

Элементы массивов в Си всегда нумеруются с нуля.

Синтаксис индексного выражения для обращения к элементу массива имеет следующий вид:

выражение1[выражение2]

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

Индексное выражение может иметь более одного индекса, что соответствует многомерному массиву. Синтаксис такого выражения следующий:

выражение1[выражение2][выражение3]:

Такое индексное выражение интерпретируется слева направо. Сначала вычисляется самое левое индексное выражение - выражение1[выражение2]. С адресом, полученным в результате сложения выражения1 и выражения2, складывается (по правилам сложения указателя и целого) выражение3 и т. д. Выражение2 и последующие выражения имеют целый тип.

Элементы многомерного массива запоминаются построчно. Примеры:

char а[2][3];

float matrix[10][15];

int b[3][3]={

 {1,2,3},

 {4,5,6},

 {7,8,9}

};

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

#include <stdio.h>

void main () {

 int b[3][3]={

  {1,2,3},

  {1,2,3},

  {1,2,3}

 };

 b[0][0]=2;

 b[2][2]=b[0][0]*4;

 for (int i=0; i<3; i++) {

  printf ("\n");

  for (int j=0; j<3; j++)

   printf ("%d ",b[i][j]);

 }

}

Пример ниже выполняет подсчет количества разных цифр, пробелов и остальных символов, вводимых с клавиатуры. Для завершения программы служит ввода символа EOF (<Ctrl>+<Z>). Преобразование кода символа c в целочисленный индекс элемента массива ndigit выполняется конструкцией c-'0'.

#include <stdio.h>

void main() {

 int  c, i, nwhite, nother;

int  ndigit[10];

nwhite = nother = 0;

for (i = 0; i < 10; ++i) ndigit[i] = 0;

while ((c = getchar()) != EOF)

 if (c >= '0' && c <= '9') ++ndigit[c-'0'];

  else if (c==' ' || c=='\n' || c=='\t')

   ++nwhite;

 else ++nother;

printf("digits =");

for (i = 0; i < 10; i++)

  printf(" %d", ndigit[i]);

printf("\nwhite space = %d, other = %d\n",

  nwhite, nother);

}

 

 

Рейтинг@Mail.ru
вверх гостевая; E-mail
Hosted by uCoz