Diaskop
|
|||||||||||
1 | |||||||||||
Определение размера массива + sizeof25.01.2012, 16:52. Показов 83373. Ответов 19
Метки нет Все метки)
(
Массив из 6 чисел: sizeof возвращает 24 байта. Тот же массив вызван функцией возвращает только 4 байта.
|
|
25.01.2012, 16:52 | |
Ответы с готовыми решениями:
19
Определение размера массива Определение размера массива Определение размера массива в функции
|
186 / 186 / 21
Регистрация: 08.01.2011
Сообщений: 1,139
|
|||||||||||
25.01.2012, 17:25 | 3 | ||||||||||
Массив нельзя передать в функцию.
0
|
Заблокирован
![]() |
|
25.01.2012, 18:01 | 4 |
Diaskop, всё дело в том какой массив статический или динамический.
char StatArr[N]; sizeof(StatArr) - выведет N*sizeof(char) байт Если массив динамический sizeof всегда возвращает размер указателя в 4 байта... char * DinArr = new char[N]; sizeof(DinArr) - вернёт четыре байта...
0
|
![]() 5053 / 3114 / 271
Регистрация: 11.11.2009
Сообщений: 7,045
|
|
25.01.2012, 23:56 | 5 |
-=ЮрА=-, дело тут не в этом, а в том, что, как и сказали выше, массив передаётся в функцию. В функции он перестаёт (для этой самой функции) быть полноценным статическим массивом (для которого компилятор хранит такую информацию, как размер занимаемой им памяти), а становится обычным указателем.
О боже, это в книге написано?? ![]()
0
|
|
26.01.2012, 10:20
#6
|
Не по теме: silent_1991, что ты хотел сказать я так и не понял...:scratch:
0
|
![]() 5053 / 3114 / 271
Регистрация: 11.11.2009
Сообщений: 7,045
|
|
26.01.2012, 11:00 | 7 |
-=ЮрА=-, вы свой предыдущий комментарий не к месту написали. В данном случае без разницы, статический массив изначально или динамический. Проблема в том, что размер пытаются вычислить в функции, в которой что статический массив, что динамический - суть указатель.
0
|
|
26.01.2012, 11:12
#8
|
Не по теме: silent_1991, лучше расскажу один анекдот
0
|
![]() 5053 / 3114 / 271
Регистрация: 11.11.2009
Сообщений: 7,045
|
|
26.01.2012, 11:16 | 9 |
-=ЮрА=-,
Не по теме: Не учите меня жить! (c) "Двенадцать стульев" Был задан чёткий вопрос: почему в функции, в которой статический массив создан, sizeof возвращает одно, а в функции, куда он передаётся как параметр, другое. Напрашивается чёткий ответ: ибо указатель. Ваш непрямолинейный динамический массив только собьёт человека с толку.
1
|
|
26.01.2012, 11:25
#10
|
Не по теме: silent_1991, на счёт прямолинейности вниму!
0
|
15 / 13 / 4
Регистрация: 23.08.2017
Сообщений: 187
|
||||||
24.09.2017, 03:05 | 11 | |||||
Тип int занимает в памяти 4байта а значит 4 ячейки по 8 бит. В 4 байта можно записать максимальное число 2^32. Если вы ввели туда число 3, то это будет в памяти вот так 00000000 00000000 00000000 00000011. Следовательно если взять sizeof(Array) то получите 4 байта размера типа int * массив числа зарезервированных ячеек. 4*6=24 а потом делим на размер вашего типа данных int, и получаем сколько в массиве чисел.
3
|
Вездепух
![]() ![]() 10816 / 5839 / 1583
Регистрация: 18.10.2014
Сообщений: 14,492
|
|
24.09.2017, 04:31 | 12 |
0
|
Любитель чаепитий
|
||||||
24.09.2017, 10:27 | 18 | |||||
0
|
16739 / 9080 / 2224
Регистрация: 30.01.2014
Сообщений: 15,817
|
|
24.09.2017, 10:49 | 19 |
Нет же.
Он делит на размер результата разыменования. А это размер элемента массива.
1
|
Модератор
![]() 8782 / 6568 / 891
Регистрация: 14.02.2011
Сообщений: 23,065
|
|
24.09.2017, 11:27 | 20 |
0
|
24.09.2017, 11:27 | |
Помогаю со студенческими работами здесь
20
Определение размера одномерного массива Определение размера строки массива строк Определение размера динамического массива строк Определение количества элементов в динамическом массиве оператором sizeof()
sizeof массива Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |