Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
KamalovRadik
7 / 7 / 2
Регистрация: 10.07.2009
Сообщений: 206
#1

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

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

Знаю что в одномерном массиве: sezeof(a)/sizeof(a[0])
А как для двухмерного?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.07.2009, 19:47     Как найти размерность в массиве С
Посмотрите здесь:

Как задать размерность одномерного массива C++
Как поменять размерность массива? C++
C++ Как изменить размерность матрицы
C++ Как найти сумму в массиве
размерность массива должна определяться динамически, это как? C++
C++ Как можно в матрице сложения, вычитания и умножения записать их размерность?
Как определить размерность массива C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
<Norton>
Отдыхающий:)
 Аватар для <Norton>
94 / 91 / 10
Регистрация: 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;
KamalovRadik
7 / 7 / 2
Регистрация: 10.07.2009
Сообщений: 206
10.07.2009, 20:03  [ТС]     Как найти размерность в массиве С #3
sezeof(a)/sizeof(a[0])-всегда работало, но я могу ошибаться
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2297 / 1667 / 86
Регистрация: 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])-всегда работало, но я могу ошибаться
Ты не ошибаешься.
<Norton>
Отдыхающий:)
 Аватар для <Norton>
94 / 91 / 10
Регистрация: 05.04.2009
Сообщений: 188
10.07.2009, 20:14     Как найти размерность в массиве С #5
извините, но у меня этот способ не работает
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2297 / 1667 / 86
Регистрация: 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])); // количество столбцов
<Norton>
Отдыхающий:)
 Аватар для <Norton>
94 / 91 / 10
Регистрация: 05.04.2009
Сообщений: 188
10.07.2009, 20:16     Как найти размерность в массиве С #7
пере компилировал, извините , но всё заработало
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2297 / 1667 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
10.07.2009, 20:16     Как найти размерность в массиве С #8
Цитата Сообщение от <Norton> Посмотреть сообщение
извините, но у меня этот способ не работает
Если ты выделяешь память динамически, то и не будет работать. Этот способ работает для статических массивов.
<Norton>
Отдыхающий:)
 Аватар для <Norton>
94 / 91 / 10
Регистрация: 05.04.2009
Сообщений: 188
10.07.2009, 20:17     Как найти размерность в массиве С #9
У меня в другом проблема была, мне компилятор на:
int a[10][10];
sizeof(a)
выдавал
4
потом это ещё раз скомпилировал, всё нормально
KamalovRadik
7 / 7 / 2
Регистрация: 10.07.2009
Сообщений: 206
10.07.2009, 20:19  [ТС]     Как найти размерность в массиве С #10
Что значит статистический, а что динамический?

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

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

Добавлено через 2 минуты 14 секунд
Для двумерного, если вам надо узнать сколько переменных находится в масиве:
n*m
KamalovRadik
7 / 7 / 2
Регистрация: 10.07.2009
Сообщений: 206
10.07.2009, 20:22  [ТС]     Как найти размерность в массиве С #12
Как задается динамически?
<Norton>
Отдыхающий:)
 Аватар для <Norton>
94 / 91 / 10
Регистрация: 05.04.2009
Сообщений: 188
10.07.2009, 20:24     Как найти размерность в массиве С #13
а если через sizeof:
sizeof(a)/sizeof(a[0][0])/sizeof(a[0][0])
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2297 / 1667 / 86
Регистрация: 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]);
<Norton>
Отдыхающий:)
 Аватар для <Norton>
94 / 91 / 10
Регистрация: 05.04.2009
Сообщений: 188
10.07.2009, 20:26     Как найти размерность в массиве С #15
извините не скинул

Добавлено через 1 минуту 19 секунд
sшzeof(a)/sizeof(a[0][0]), вот так
odip
Эксперт С++
 Аватар для odip
7151 / 3291 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
10.07.2009, 20:27     Как найти размерность в массиве С #16
int arr[5]; // Статический массив, память выделяется в стеке автоматически
В стеке память будет выделяться, если этот код находится внутри функции.
А если код не находится внутри функции, то память будет зарезервирована в сегменте статических данных и попутно массив будет заполнен нулями.
KamalovRadik
7 / 7 / 2
Регистрация: 10.07.2009
Сообщений: 206
10.07.2009, 20:29  [ТС]     Как найти размерность в массиве С #17
http://www.cyberforum.ru/cpp-beginners/thread43624.html


помогите плз
Sinys
26 / 26 / 2
Регистрация: 25.12.2008
Сообщений: 177
Завершенные тесты: 1
11.07.2009, 00:29     Как найти размерность в массиве С #18
Статический - означает что его размер однозначно задан числом.
Динамический - память выделяется по ходу выполнения... (удобно если не знаеш количество елементов в нем)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.07.2009, 08:36     Как найти размерность в массиве С
Еще ссылки по теме:

C++ Как увеличить размерность массива?
C++ Как из файла прочитать размерность матрицы и её содержимое?
C++ Как найти в массиве цифру
C++ Как правильно задавать размерность массива?
Как хранить размерность массива? C++

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

Или воспользуйтесь поиском по форуму:
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
17183 / 5437 / 336
Регистрация: 30.03.2009
Сообщений: 14,742
Записей в блоге: 26
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 по крайней мере этот момент реализован
Yandex
Объявления
11.07.2009, 08:36     Как найти размерность в массиве С
Ответ Создать тему
Опции темы

Текущее время: 03:40. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru