Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Объявление встроенного массива.

Поиск

1. без extern

 Объявление совмещено с определением, поэтому программист должен предоставить компилятору информацию, сколько выделить памяти.

         char cAr[10];

         int iAr[15];

         float fAr[5][3];

         float f1Ar[3][3][8];

    2. с extern

          При объявлении массива производим описание свойств внешнего массива, определённого в другом файле.

          При объявлении программист должен предоставить компилятору информацию о том, как вычислить адрес начала массива.

         extern in tar[10][5];

         const int N=10;

         char cAr[N]; //OK!

         int N1=5;

         char cAr1[N1]; //ошибка

Инициализация массива.

int ar1[10][5];

main ()

{

static char ar2[100];

float ar3[3][4][5];

}

Явная инициализация.

int ar4[3]={1,2,3};

char cAr[2]={‘A;B’};

char cAr1[2]={“AB”};

int nAr[2][2]={{1;1},{2;2}};

char cstring[2][80]={“ Первая строка ”,” Вторая строка ”};

 
80


 

2
п

е

р

в

а

я

_

с

т

р

о

к

а

в

т

о

р

а

я

_

с

т

р

о

к

а

 

 Можно объявить одномерный массив без указания числа элементов.

int nAr[][3]={{1,2,3},{2,3,4},…{7,5,8}} //не указано количество строк

 

Обращение к элементу массива. Оператор [].

 

 Доступ к отдельным элементам массива может выполняться с помощью индексов (они нумеруются с 0, а не с 1). Индекс может быть любым целым выражением.

 

char Ar[10];

char c=Ar[0];

c=Ar[g];

c=Ar[i];    //i-int

c=Ar[i+g-k]; // c=Ar[3.48]; ERROR!!

float b;

c=Ar[(int)b]; //приводит к типу int (может быть потеря данных)

size of – количество памяти, которое занимает массив

char ar[]=”abc”;

size_t n=sizeof(ar)/sizeof(char)

n=sizeof(ar)/sizeof(ar[0]);

int ar[][3]={1,2,3,4,5,6,7};

size_t n=sizeof(ar)/sizeof(int);

n=sizeof(ar[0])/sizeof(ar[0][0]) //подсчёт элементов в строке

n=sizeof(ar)/sizeof(ar[0]); //подсчёт числа строк в массиве

ar[]={2,4,5,8};

n=sizeof(ar)/sizeof(ar[0]);

 

Связь массивов и указателей.

 

 Имя одномерного массива компилятор интерпретирует как константный указатель на нулевой элемент массива.

ar[0]=1

ar[1]=2

ar[2]=3

ar[3]=4

ar[4]=5

ar

p

 

В памяти:

int *p=ar;

int *int [];

int tmp=ar[i];

                               равнозначно

tmp=p[i];

tmp=*(p+i);

tmp=*(ar+i);

переместим указатель к следующему элементу массива, но не ar++(ошибка!)

p++; //ar++i

 

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

 

 Двумерные массивы можно представить как одномерный, каждым элементом которого является строка (т.е. одномерный массив). Имя двумерного массива компилятор интерпретирует как константный указатель на нулевую строку.

int ar[2][3]={{1;2;3},{4;5;6}};

ar[0][0]=1

ar[0][1]=2

ar[0][2]=3

ar[1][0]=4

ar[1][1]=5

ar[1][2]=6

int ar[N][M];

int sum!=0;

for (int i=0; i<N; i++)

{

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

sum+=ar[i][j];

int *p=&ar[0][0];

for (int i=0; i<sizeof(ar)/sizeof(int); i++)

{

    sum+=*p;

    p++;

}

}

Трёхмерные массивы.

 

 Имя трёхмерного массива компилятор интерпретирует как константный указатель на нулевой слой (нулевой двумерный массив).

int ar[2][3][4]={{{1,2,3,4},{5,6,7,8},{9,10,11,12}},{{-1,-2,-3,-4},{-5,-6,-7,-8},{-9,-10, -11,-12 }}}

Массивы указателей.

 

char * ar [20];

char *ar[]={ “One”,”Two”,”Three” };

char ar1[][6]={ “One”,”Two”,”Three” };

char ar1[3][6];

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

ar1[1][1]=     //ar[1][1]=”D”; - ошибка!



Поделиться:


Последнее изменение этой страницы: 2021-12-15; просмотров: 41; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.118.24.176 (0.008 с.)