Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Определение размера памяти двумерных массивов

Обращение к элементам двумерного массива

Обращение к элементам двумерного массива осуществляется так же, как и к элементам одномерного.

ИмяМассива[ВыражениеТипаКонстанты][ВыражениеТипаКонстанты];

или

ИмяМассива[ЗначениеИндекса][ЗначениеИндекса];

Например:

a[0][0] – индекс задается как константа,

d[55][5] – индекс задается как константа,

s[i][j] – индекс задается как переменная,

w[4*p][3+t] – индекс задается как выражение.

 

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

спецификатор-типа имя_массива [конст_выражение1] [конст_выражение2];

Например,

int a[2][3]; /* представлено в виде матрицы

a[0][0] a[0][1] a[0][2]

a[1][0] a[1][1] a[1][2]*/

Объем занимаемой памяти в байтах для двухмерного массива вычисляется по формуле:

Байты = sizeof (тип) * конст_выражение1* конст_выражение2

Если мы имеем дело с двумерным массивом B размерности M × N, расположенным в памяти по строкам, то адрес элемента B[i][j] вычисляется по формуле:

адрес(B[i][j]) = адрес(B[0][0]) + (i*N+j)*k

Так как массивы занимают непрерывный участок памяти, то двумерный массив размерности M × N можно рассматривать как одномерный массив из M указателей, которые являются константами. Константы-указатели содержат значения адресов M одномерных безымянных массивов. Поэтому обращение к элементу B[i][j] посредством B[i*N + j] невозможно, так как указателя с номером i*N + j может не существовать.

 

Пример 1. Определение размера памяти двумерного массива

#include "stdafx.h"

#include <iostream>

using namespace std;

#define v 4

#define p 3

int _tmain(int argc, _TCHAR* argv[]){

const int q=4, r=1;

int i_mas[10][10];

int k=sizeof(i_mas);

cout << "i_mas[10][10] занимает " << k << " байт ";

 

float f_mas[3][5]={{2.0},{4.5,8.3},{7.0,1.0,5.5,7.8}};

int t=sizeof(f_mas);

cout << "f_mas[3][5]={{2.0},{4.5,8.3},{7.0,1.0,5.5,7.8}}

занимает " << t << " байт ";

 

double d_mas[2*q-r][2*v/p];

int w=sizeof(d_mas);

cout << "d_mas[2*q-r][2*v/p] занимает " << w << " байт ";

 

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

int g=sizeof(r_mas);

cout << "r_mas[][3]={{2,5,7},{-4,8,-3},{0,-1,1}} занимает "

<< g << " байт ";

system("pause");

return 0;

}

 

Результат выполнения программы:

i_mas[10][10] занимает 400 байт – 4 байта (тип int) * 10*10 (количество элементов массива)

f_mas[3][5]={{2.0},{4.5,8.3},{7.0,1.0,5.5,7.8}} занимает 60 байт – 4 байта (тип float) * 3*5 (объявленное количество элементов массива)

d_mas[2*q-r] [2*v/p] занимает 112 байт – 8 байта (тип double) * 7*2 (вычисленное через формулу количество элементов массива)

r_mas[][3]={{2,5,7},{-4,8,-3},{0,-1,1}} занимает 36 байт – 4 байта (тип int) * 3*3 (заданное количество элементов массива)

<== предыдущая лекция | следующая лекция ==>
Инициализация двумерных массивов | Указатели и двумерные массивы
Поделиться с друзьями:


Дата добавления: 2014-01-20; Просмотров: 1113; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.008 сек.