0 / 0 / 0
Регистрация: 19.11.2016
Сообщений: 26
|
|
1 | |
Работа оператора Sizeof04.12.2016, 01:20. Показов 2372. Ответов 14
Метки нет Все метки)
(
Каким образом вычисляется размер, допустим, массива int mass[5] ? Где-то в памяти хранится размер, и оператор просто его оттуда вытаскивает, или же в конце массива есть байт\слово\двойное слово, хранящее размер? Или же при компиляции sizeof преобразуется в некотрое значение ?
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
|
|
04.12.2016, 01:20 | |
Ответы с готовыми решениями:
14
Нюансы использования оператора sizeof()
Неправильная работа оператора присваивания после работы оператора суммирования динамическое созданный массив и работа sizeof |
277 / 226 / 93
Регистрация: 27.06.2016
Сообщений: 639
|
|
04.12.2016, 03:16 | 2 |
nucrea, размер известен на стадии компиляции.
0
|
Почетный модератор
![]() 5850 / 2861 / 392
Регистрация: 01.11.2011
Сообщений: 6,905
|
|
09.12.2016, 14:49 | 3 |
Конкретный компилятор реализует данный вопрос одному только ему известным образом (например, размещает размер перед указателем на первый элемент массива). Конкретная реализация sizeof для этого же компилятора знает где глядеть размер.
0
|
Диссидент
![]() 27197 / 16952 / 3747
Регистрация: 24.12.2010
Сообщений: 38,134
|
||||||
09.12.2016, 22:10 | 5 | |||||
Это другой вопрос. Это вопрос - сколько выделяется динамической памяти. Чтобы затем эту память освободить и вернуть в пространство свободной. Но это никак не совпадает с sizeof
0
|
GbaLog-
|
09.12.2016, 23:26
#6
|
0
|
Вездепух
![]() ![]() 10425 / 5696 / 1551
Регистрация: 18.10.2014
Сообщений: 14,048
|
|
10.12.2016, 00:10 | 7 |
Очень просто: 5 умножается на размер
int - вот и готов размер.Зачем его где-то "хранить"? Результат sizeof - константа времени компиляции. На стадии компиляции все размеры и так известны.Именно так. Это не имеет абсолютно никакого отношения к оператору sizeof . Оператор sizeof никогда не пытается где-то "глядеть размер".
1
|
nd2
|
10.12.2016, 01:03
#8
|
0
|
GbaLog-
|
10.12.2016, 01:14
#9
|
0
|
TheCalligrapher
|
10.12.2016, 01:16
#10
|
0
|
nd2
|
10.12.2016, 01:20
#11
|
0
|
GbaLog-
|
10.12.2016, 01:50
#12
|
0
|
nd2
|
10.12.2016, 02:17
#13
|
0
|
![]() ![]() |
|
10.12.2016, 11:49 | 14 |
Действительно, у VLA размер выясняется только в runtime. К теме несколько не относится, но для самообразования людям знать полезно
В GNU C/C++ и C99 (и в последующих стандартах) есть такая байда как VLA - Variable Length Arrays: https://gcc.gnu.org/onlinedocs... ength.html. Так вот sizoef от такого массива НЕ является константой компиляции, а является выражением вида "размер одного элемента помножить на динамически вычисленный размер"
1
|
GbaLog-
|
10.12.2016, 14:44
Работа оператора Sizeof
#15
|
0
|
10.12.2016, 14:44 | |
Fwrite (buffer , sizeof(char), sizeof(buffer), pFile) sizeof( char * ) & sizeof(char) Работа с матрицами n-го порядка без использования условного оператора. Избыточное копирование объекта при реализации оператора умножения и оператора присваивания Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |