Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
c++ / L_4.doc
Скачиваний:
105
Добавлен:
02.04.2015
Размер:
120.83 Кб
Скачать

Массивы

Массив – набор данных одного и того же типа, обращение к которым происходит с применением общего для всех имени

Определение массива

тип name[размер];

int Arr_1[10];

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

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

int Arr_4[3] = {1,2}; Частичное определение массива. Последний элемент получает значение 0.

const k=10;

float A[k];

Доступ к элементам массива

A[0]=1;

A[i]=i*2;//i- индекс –целое число



int myArr[3] Размещение массива в памяти

myArr[0] myArr[1] myArr[2]

BaseAddr

BaseAddr+4

BaseAddr+8

  • Базовый элемент массива имеет индекс 0.

  • Размеры массива должны быть константами.

  • Индекс массива – целое число от 0 до k-1, где k- число элементов в массиве

  • Обращение к элементу массива осуществляется с помощью индекса (номера) элемента.

  • В языке С не проверяется выход индекса за пределы массива

Индекс может быть :

  • Константой,

  • Переменной,

  • Выражением целого типа

  • Нельзя присвоить один массив другому!!!

  • Если массив при объявлении не инициализирован, то его элементы имеют случайные значения

Определение количества элементов массива

int arr[]={1, 2, 3, 4, 5, 6, 7, 8, 9, 10}

cout<<sizeof(arr)/sizeof(arr[0])<<endl;

Многомерные массивы

Определение

тип name[размер1][размер2]…[размерN];

int MyArr[3][3] = {0,1,2,3,4,5,6,7,8};

эквивалентны

int MyArr[3][3] = {{0,1,2}, {3, 4, 5} {6, 7, 8}};

int MyArr[3][3] = {{0,1}, {3, 4, 5} {6, 7}};

частичное определение

int myArr[2][3] Размещение массива в памяти

myArr[] [0] myArr[] [1] myArr [] [2]

myArr[0] []

BaseAddr

BaseAddr+4

BaseAddr+8

myArr[1] []

BaseAddr+12

BaseAddr+16

BaseAddr+20

Пример1 -Поиск минимального элемента в массиве

#define k 5 //количество элементов в массиве

// директива #define определяет имя макроса.

// Здесь к – макроимя; 5- макроподстановка

void main()

{

int a[k]; // массив

int min; // номер минимального элемента

int i; // индекс массива

for (i=0;i<k; i++) cin>>a[i]; //scanf("%d",&a[i]);

min=0; // считаем, что первый элемент массива минимальный

for (i=1;i<k;i++)

if (a[i]<a[min]) min=i;// назначаем новый номер минимального //элемента

printf("Min element is a[%d]=%d ",min,a[min]);

getch();

}

Указатели

Указатель (pointer) – переменная, содержащая адрес другой переменной

тип *<имя переменной-указателя>

С помощью указателя осуществляется косвенная адресация (indirection)

Назначение указателей

  • Для размещения данных в свободных областях памяти (heap) и доступа к ним

  • Для доступа к переменным и функциям классов

  • Для передачи параметров в функции по ссылке

Пример1

#include <stdio.h>

#include <conio.h>

int main()

{

float x=10.1,y;

float *pf=NULL; // задание указателя

pf=&x; // адресу pf присваивается адрес x; &-операция адресации

y=*pf; //присвоить содержимое адреса pf переменной y ;

// * - оператор разыменования или косвенной адресации

printf("x=%f y=%f\n",x,y); //x=10.1 y=10.1

printf("pf=%p\n",pf);//печать адреса pf в шестнадцатеричном

// формате

pf++; // увеличить адрес на 4 байта, т.к. длина float равна 4;

*pf=0;

printf("pf=%p\n",pf); //печать адреса pf

printf("x=%f y=%f\n",x,y); // x=10.1 y=10.1

printf("*pf=%f\n" ,*pf); // содержимое адреса pf =0

y=1+*pf*y;

printf("x=%f y=%f\n",x,y);//x=10.1 y=1, т.к. y=1+0*10.1

getch();

return 0;

}

Пример 2

#include <stdio.h>

#include <conio.h>

void main()

{

int *p, num; // p – указатель, num - целое

p=&num;

*p=100;

printf("%d=",num); // По адресу p число 100

(*p)++; // содержимое адреса p увеличить на 1

printf("%d=",num); // По адресу p число 101

(*p)--; // содержимое адреса p уменьшить на 1

printf("%d=",num); // По адресу p число 100

printf("%p=",p); //адрес p=0012FF84

p++; // увеличение адреса на 4 бaйта

printf("%p=",p); //адрес p=0012FF88

getch();

}

Соседние файлы в папке c++