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

sizeof и количество элементов в массиве - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.88
cppuser
0 / 0 / 0
Регистрация: 03.09.2011
Сообщений: 4
03.09.2011, 14:57     sizeof и количество элементов в массиве #1
Доброе время суток. Подскажите пожалуйста почему sizeof не возвоащает кол.элементов в массиве.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
 
int main()
{
    using namespace std;
    short int symbols[] = {34,6,4,6,3,43,2,55,12,432,54,34,543,234,432};
    int a;
 
    cout << "sizeof(symbols)" << sizeof(symbols) << "\n";
    cout << "sizeof(int)" << sizeof(int) << "\n";
    cout << sizeof(symbols) / sizeof(short int);
 
    cin >> a;
 
    return 0;
}
sizeof(symbols) - возвращает 30
sizeof(int) - размер байтах.

что значит 30 и почему 30 / 4 = 15 ?
И подскажите пожалуйста мануал по работе с массивами.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.09.2011, 14:57     sizeof и количество элементов в массиве
Посмотрите здесь:

C++ В массиве A из N элементов (N не больше 30) определить количество элементов, имеющих четные значения, и сумму этих элементов.
В массиве А(n) (n<=7) хотя бы один нуль. Определить количество положительных и количество отрицательных элементов к первому нулю. C++
Определение количества элементов в динамическом массиве оператором sizeof() C++
C++ В одномерном массиве состоящий из n элементов вычислить количество элементов массива, меньших C
C++ в массиве . найти произведение нулевых элементов, количество элементов, превышающих значение среднего арифметического элементов массива
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
grizlik78
Эксперт С++
 Аватар для grizlik78
1884 / 1416 / 102
Регистрация: 29.05.2011
Сообщений: 2,961
03.09.2011, 15:04     sizeof и количество элементов в массиве #2
Цитата Сообщение от cppuser Посмотреть сообщение
sizeof(symbols) - возвращает 30
Это размер массива в байтах.

Цитата Сообщение от cppuser Посмотреть сообщение
sizeof(int) - размер байтах.
И это размер в байтах. Для типа int.


Цитата Сообщение от cppuser Посмотреть сообщение
что значит 30 и почему 30 / 4 = 15 ?
30 байт потому, что каждый элемент типа short int в данном случае имеет размер 2 байта.
30/2 = 15. А на 4 делить не надо, ведь int это не short int

Добавлено через 2 минуты
В C++ для определения размера не динамических массивов можно использовать вот такую функцию
-=ЮрА=-
Заблокирован
Автор FAQ
03.09.2011, 17:51     sizeof и количество элементов в массиве #3
Цитата Сообщение от grizlik78 Посмотреть сообщение
Это размер массива в байтах.
- в дополнение скажу что sizeof применим лишь для статических массивов, например для такого массива
int * mass = new int[n];
sizeof(mass) - не вернёт его размер...
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
03.09.2011, 19:44     sizeof и количество элементов в массиве #4
Цитата Сообщение от grizlik78 Посмотреть сообщение
В C++ для определения размера не динамических массивов можно использовать вот такую функцию
А можно написать _countof .)
grizlik78
Эксперт С++
 Аватар для grizlik78
1884 / 1416 / 102
Регистрация: 29.05.2011
Сообщений: 2,961
03.09.2011, 20:05     sizeof и количество элементов в массиве #5
Цитата Сообщение от Deviaphan Посмотреть сообщение
А можно написать _countof .)
Можно, но это не из C++
К тому же при попытке использования с указателем _countof молча вернёт неправильный результат, в отличие от array_size(), с которым компилятор укажет на ошибку компиляции.

Добавлено через 2 минуты
Хотя нет, погорячился я. В C++ этот макрос определён как раз аналогично array_size. Но в случае не-Windows всё-равно придётся самостоятельно определять.

Добавлено через 6 минут
Даже, скорее, не не-Windows, а не-Microsoft
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
03.09.2011, 20:08     sizeof и количество элементов в массиве #6
Цитата Сообщение от grizlik78 Посмотреть сообщение
Даже, скорее, не не-Windows, а не-Microsoft
Но выше указанная функция не compile-time (новый стандарт не в счёт). А _countof И аналогичные работают в compile-time.
grizlik78
Эксперт С++
 Аватар для grizlik78
1884 / 1416 / 102
Регистрация: 29.05.2011
Сообщений: 2,961
03.09.2011, 20:20     sizeof и количество элементов в массиве #7
Цитата Сообщение от Deviaphan Посмотреть сообщение
Но выше указанная функция не compile-time (новый стандарт не в счёт). А _countof И аналогичные работают в compile-time.
Ну что же, возможно для MSVC и нужен столь запутанный вариант, но за GCC я спокоен, там и предыдущая версия функции вычисляется в compile-time.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
03.09.2011, 20:30     sizeof и количество элементов в массиве #8
Цитата Сообщение от grizlik78 Посмотреть сообщение
там и предыдущая версия функции вычисляется в compile-time
Т.е. и в предыдущей версии gcc можно записать?
C++
1
2
int arrayA[] = {...};
int arrayB[ ArraySize(a) ];
Поддержка подобного кода появилась только в новом стандарте (я даже ключевого слова ещё не запомнил).
grizlik78
Эксперт С++
 Аватар для grizlik78
1884 / 1416 / 102
Регистрация: 29.05.2011
Сообщений: 2,961
03.09.2011, 20:39     sizeof и количество элементов в массиве #9
А, ты про VLA... Да, наверное в этом случае результат функции array_size будет считаться неконстантным, ибо в compile-time её вычисляет уже оптимизатор, а тогда уже может оказаться поздно. Ладно, будем считать, что убедил.
Сыроежка
Заблокирован
03.09.2011, 20:53     sizeof и количество элементов в массиве #10
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
- в дополнение скажу что sizeof применим лишь для статических массивов, например для такого массива
int * mass = new int[n];
sizeof(mass) - не вернёт его размер...
У вас нет массива mass. mass - это указатель на выделенную память, а не массив. Так что ваше утверждение просто некорректное.
asics
03.09.2011, 21:30
  #11

Не по теме:

Цитата Сообщение от Deviaphan Посмотреть сообщение
Поддержка подобного кода появилась только в новом стандарте
Цитата Сообщение от grizlik78 Посмотреть сообщение
А, ты про VLA...
VLA есть в С++11 ?

grizlik78
03.09.2011, 21:35
  #12

Не по теме:

Цитата Сообщение от asics Посмотреть сообщение
VLA есть в С++11 ?
Не видел, лень искать. Но по мнению g++ в c++0x его тоже нет, то есть это чисто GCC-шное расширение.

asics
03.09.2011, 21:44
  #13

Не по теме:

Цитата Сообщение от Deviaphan Посмотреть сообщение
я даже ключевого слова ещё не запомнил
Не constexpr ли он имеет ввиду

niXman
Эксперт C++
 Аватар для niXman
3133 / 1445 / 49
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
04.09.2011, 01:06     sizeof и количество элементов в массиве #14
Цитата Сообщение от Deviaphan Посмотреть сообщение
(я даже ключевого слова ещё не запомнил)
constexpr.
в некотором коммерческом проекте, при помощи этой возможности, я реализовал класс mpl_string и набор constexpr функций, и на основе всего этого, реализовал compile-time парсер для строк.

Добавлено через 3 минуты
надеюсь заказчик позволит опубликовать этот код как OpenSource. для многих это будет как минимум познавательно. для более пытливых, примером реально работающего compile-time парсера.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.09.2011, 07:42     sizeof и количество элементов в массиве
Еще ссылки по теме:

в массиве . найти произведение ненулевых элементов, количество элементов, превышающих значение среднего арифметического элементов массива C++
В одномерном массиве, состоящем из n вещественных элементов, вычислить количество отрицательных элементов массива C++
С помощью sizeof определить количество элементов в целом массиве C++

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

Или воспользуйтесь поиском по форуму:
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
04.09.2011, 07:42     sizeof и количество элементов в массиве #15
Да-да, именно constexpr запомнить и не могу.
Жаль, что в MSVC поддержки пока нету.(

Добавлено через 2 минуты
Цитата Сообщение от asics Посмотреть сообщение
VLA есть в С++11 ?
Не-не-не, я нt про VLA (у меня стд::ввектор есть для этих целей). Я про constexpr.
Yandex
Объявления
04.09.2011, 07:42     sizeof и количество элементов в массиве
Ответ Создать тему
Опции темы

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