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

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

спецификатор-типа имя_массива [конст_выражение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

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

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

#include <iostream.h>

#define v 4

#define p 3

void main() {

const int q=4, r=1;

int i_mas[10][10];

int k=sizeof(i_mas);

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

 

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 << " байт\n";

 

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

int w=sizeof(d_mas);

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

байт\n";

 

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 << " байт\n";

}

 

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

i_mas[10][10] занимает 200 байт – 2 байта (тип 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}} занимает 18 байт – 2 байта (тип int) * 3*3 (заданное количество элементов массива)








Дата добавления: 2015-02-16; просмотров: 654;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.004 сек.