Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
8 / 8 / 2
Регистрация: 10.07.2009
Сообщений: 206
1

Как найти размерность в массиве С

10.07.2009, 19:47. Просмотров 2275. Ответов 18
Метки нет (Все метки)

Знаю что в одномерном массиве: sezeof(a)/sizeof(a[0])
А как для двухмерного?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.07.2009, 19:47
Ответы с готовыми решениями:

Как изменять размерность в многомерном массиве
например есть ряд переменных которые меняются при каждом нажатии на кнопку с одномерным массивом...

Найти в исходном массиве элементы кратные пяти, сформировать из них новый массив и определить его размерность
Дан массив А размерностью m. Найти в исходном массиве элементы кратные пяти, сформировать из них...

Как узнать размерность внутреннего вектора в массиве List<List<Double>>?
Добрый вечер! Уважаемые, подскажите пожалуйста, как узнать размерность внутренних строк в...

Как найти базис и размерность векторного пространства
Доказать, что множество всех квадратных матриц n*n с действительными элементами и нулевой суммой...

18
Отдыхающий:)
94 / 91 / 22
Регистрация: 05.04.2009
Сообщений: 188
10.07.2009, 19:58 2
Во первых, "sezeof(a)/sizeof(a[0])" <-- это не правильно!!!
Этим вы узнаёте только размер одного элемента!
int a[n][m],s;
//Размер
s = sizeof(a)*n*m;
0
8 / 8 / 2
Регистрация: 10.07.2009
Сообщений: 206
10.07.2009, 20:03  [ТС] 3
sezeof(a)/sizeof(a[0])-всегда работало, но я могу ошибаться
0
Эксперт С++
2328 / 1701 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
10.07.2009, 20:09 4
Цитата Сообщение от <Norton> Посмотреть сообщение
Во первых, "sizeof(a)/sizeof(a[0])" <-- это не правильно!!!
Ты о чем вообще? Это классический способ получения размера статического массива. sizeof(a) - размер всего массива в байтах, sizeof(a[0]) - размер первого элемента (одного). sizeof(a)/sizeof(a[0]) получается размер всего массива делим на размер одного элемента и получаем что? Естественно размер (количество элементов) массива.
Цитата Сообщение от KamalovRadik Посмотреть сообщение
sezeof(a)/sizeof(a[0])-всегда работало, но я могу ошибаться
Ты не ошибаешься.
1
Отдыхающий:)
94 / 91 / 22
Регистрация: 05.04.2009
Сообщений: 188
10.07.2009, 20:14 5
извините, но у меня этот способ не работает
0
Эксперт С++
2328 / 1701 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
10.07.2009, 20:15 6
Например, так:
C++
1
2
3
4
int matrix[10][5];
 
int n = sizeof(matrix) / sizeof(matrix[0]);          // количество строк
int m = sizeof(matrix) / (n * sizeof(matrix[0][0])); // количество столбцов
0
Отдыхающий:)
94 / 91 / 22
Регистрация: 05.04.2009
Сообщений: 188
10.07.2009, 20:16 7
пере компилировал, извините , но всё заработало
0
Эксперт С++
2328 / 1701 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
10.07.2009, 20:16 8
Цитата Сообщение от <Norton> Посмотреть сообщение
извините, но у меня этот способ не работает
Если ты выделяешь память динамически, то и не будет работать. Этот способ работает для статических массивов.
0
Отдыхающий:)
94 / 91 / 22
Регистрация: 05.04.2009
Сообщений: 188
10.07.2009, 20:17 9
У меня в другом проблема была, мне компилятор на:
int a[10][10];
sizeof(a)
выдавал
4
потом это ещё раз скомпилировал, всё нормально
0
8 / 8 / 2
Регистрация: 10.07.2009
Сообщений: 206
10.07.2009, 20:19  [ТС] 10
Что значит статистический, а что динамический?

Добавлено через 32 секунды
Так тоже можно?
//Размер
s = sizeof(a)*n*m;

Добавлено через 1 минуту 2 секунды
А как записать массив н-р с n ,если n узнаешь тока в конце?
0
Отдыхающий:)
94 / 91 / 22
Регистрация: 05.04.2009
Сообщений: 188
10.07.2009, 20:22 11
статистический - это когда память выделенная под переменную не можеть быть изменена программистом, а динамический - когда программист может сам управлять памятью выделяемой под переменную

Добавлено через 2 минуты 14 секунд
Для двумерного, если вам надо узнать сколько переменных находится в масиве:
n*m
0
8 / 8 / 2
Регистрация: 10.07.2009
Сообщений: 206
10.07.2009, 20:22  [ТС] 12
Как задается динамически?
0
Отдыхающий:)
94 / 91 / 22
Регистрация: 05.04.2009
Сообщений: 188
10.07.2009, 20:24 13
а если через sizeof:
sizeof(a)/sizeof(a[0][0])/sizeof(a[0][0])
0
Эксперт С++
2328 / 1701 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
10.07.2009, 20:24 14
Цитата Сообщение от KamalovRadik Посмотреть сообщение
Что значит статистический, а что динамический?
Динамический массив - массив память под который выделена явно с помощью new или malloc, например
C++
1
2
int n = 5;
int* arr = new int[n];  // массив размером n, память под который выделена динамически в куче
Статический:
C++
1
int arr[5];  // Статический массив, память выделяется в стеке автоматически
Что ты подразумеваешь под размером?
Если количество строк и столбцов - я выше писал как это сделать в посте #6.
Если общее количество элементов то также как и для одномерного:
C++
1
sizeof(matrix) / sizeof(matrix[0][0]);
1
Отдыхающий:)
94 / 91 / 22
Регистрация: 05.04.2009
Сообщений: 188
10.07.2009, 20:26 15
извините не скинул

Добавлено через 1 минуту 19 секунд
sшzeof(a)/sizeof(a[0][0]), вот так
0
Эксперт С++
7171 / 3229 / 77
Регистрация: 17.06.2009
Сообщений: 14,166
10.07.2009, 20:27 16
int arr[5]; // Статический массив, память выделяется в стеке автоматически
В стеке память будет выделяться, если этот код находится внутри функции.
А если код не находится внутри функции, то память будет зарезервирована в сегменте статических данных и попутно массив будет заполнен нулями.
0
8 / 8 / 2
Регистрация: 10.07.2009
Сообщений: 206
10.07.2009, 20:29  [ТС] 17
https://www.cyberforum.ru/cpp-... 43624.html


помогите плз
0
28 / 28 / 6
Регистрация: 25.12.2008
Сообщений: 186
11.07.2009, 00:29 18
Статический - означает что его размер однозначно задан числом.
Динамический - память выделяется по ходу выполнения... (удобно если не знаеш количество елементов в нем)
0
Evg
Эксперт CАвтор FAQ
21117 / 8133 / 628
Регистрация: 30.03.2009
Сообщений: 22,447
Записей в блоге: 30
11.07.2009, 08:36 19
Статический массив: int a[5];
Динамический: int *a = malloc (...); по языку это НЕ массив, а указатель, а потому sizeof от него взять нельзя
VLA (variable length array): int a[n]; - здесь конструкция sizeof работает, хотя на самом деле это скорее runtime sizeof. При этом, если ПОСЛЕ задания массива изменить значение переменной n, а потом взять sizeof - всё равно будет работать. В gcc по крайней мере этот момент реализован
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.07.2009, 08:36

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Как найти max элемент в двумерном массиве, и как найти min элемент в одномерном массиве?
Не работает программа, ошибки. Вроде понял, как сделать min и max элементы для одномерного массива,...

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

Найти размерность и базис
10.Для подпространств V1 и V2 всех решений однородных систем уравнений найти размерность s и базис...

Найти базис и размерность
Перезанимался и затупил. Не могу найти базис. Разъясните логику пож. Многочлены P(x) с...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.