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

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

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

Массивы.

Арифметика указателей.

Инициализация указателя и оператор получения адреса объекта.

 

& - амперсант

Чтобы провести явную инициализацию указателя:

int n=1;

int *pn=&n;

int a[100];

int *pa=&a;

char *pstr=”string”;

char *pstr=&”string”;

 

 

int * p2;

p2=pn;

pn++;

pn=pn+sizeof(int);

p2=pn+5;

p2=pn+5*sizeof(int)

if (pn==p2)

Существует вид указателя на объекты любого типа:

void *;

void * pvoid;

int n;

char c;

int * pn;

pvoid=&h; // OK

pvoid=&c; //OK

pvoid=pn; //OK

reinterpret_cast

double d=99.99;

int n=d; //d=99

int n=0x12345;

char c=n;

int *pn=&n;

char *pc=reinterpret_cast

<char*> (&n);

 

Свойства массивов:

1. В памяти расположена совокупность упорядоченных элементов данных (последовательно).

2. Данные должны быть одного и того же типа.

3. Данные занимают непрерывно линейную область памяти.

4. Каждый массив имеет имя (оно является константным указателем, равным адресу начала массива, нулевого байта, нулевого элемента массива). Тип такого указателя зависит от размерности массива.

5. Доступ к отдельным элементам массива может осуществляться по имени массива и индексу (порядковый №) элемента или с помощью оператора <<*>> разыменовывания.

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]={“Первая строка”,”Вторая строка”};

 
 


п

е р в а я _ с т р о к а
в т о р а я _ с т р о к а

 

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

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]);