Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.61/100: Рейтинг темы: голосов - 100, средняя оценка - 4.61
55 / 38 / 20
Регистрация: 30.03.2012
Сообщений: 330

Размер динамического массива

23.09.2015, 00:28. Показов 21248. Ответов 29
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Есть такой код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include <iostream>
#include <conio.h>
#include <clocale>
#include <ctime>
 
using namespace std;
 
void CreateRandomArray(int*&, int, int, int);
void PrintArray(int*);
 
int main()
{
    int* arr = NULL;
    
    int s = 5;
    int b = 6;
    int e = 10;
 
    CreateRandomArray(arr, s, b, e);
    PrintArray(arr);
 
    _getch();
    return 0;
}
 
 
void CreateRandomArray(int*& _array, int _size, int _begin, int _end)
{
    _array = NULL;
    _array = new int[_size];
 
    for (int i = 0; i < _size; i++)
        *(_array + i) = _begin + rand() % (_end - _begin + 1);
}
 
 
void PrintArray(int* _array)
{
    int size = sizeof _array / sizeof *_array;
    cout << "Array:" << endl;
    cout << "\t";
    for (int i = 0; i < size; i++)
        cout << *(_array + i) << " ";
}
Я не понимаю. При вычислении размера массива
C++
1
int size = sizeof _array / sizeof *_array;
я получаю 1. Почему?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
23.09.2015, 00:28
Ответы с готовыми решениями:

Функция с применением динамического массива, чтобы размер массива увеличивался по мере необходимости
Ребята, подскажите, кто может, каким образом создать функцию с применением динамического массива, но так, чтобы размер массива увеличивался...

Размер динамического массива
Как узнать сколько заполненных елементов в динамическом массиве, если под него выделено 400 элементов.Т.е. узнать сколько элементов из них...

Размер динамического массива
Здравствуйте, есть ли какая функция, которая возвращает размер динамического массива (желательно для 2-х мерного)? если мне, к примеру, в...

29
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
24.09.2021, 13:15
Студворк — интернет-сервис помощи студентам
NoobasProgramas, посмотрите тему и сам вопрос от ТС.
Цитата Сообщение от nocl1p Посмотреть сообщение
C++
1
2
3
4
5
6
7
void CreateRandomArray(int*& _array, int _size, int _begin, int _end)
{
 _array = NULL;
 _array = new int[_size];///////////////Сюда смотрите/////////////////////
for (int i = 0; i < _size; i++)
 *(_array + i) = _begin + rand() % (_end - _begin + 1);
}
Ваша си-шная функция возвращает size_t (обычно unsigned int) в байтах. Использование малоков к тому что выделено клисанами оператором new (если он не перегружен или не реализован малоками или пеленгами) чревато. Кроме того (я не си-шник чтобы утверждать), но похоже _msize это MS-happiness. Не стандартная штука даже в сях.
0
0 / 0 / 0
Регистрация: 19.11.2017
Сообщений: 31
24.09.2021, 16:49
Не совсем понимаю, я её иногда использую, чтоб не нагружать программу лишними переменными(в частности классы), объявляя указатели всегда присваиваю NULL
C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
#include <windows.h>
#include <malloc.h>
using namespace std;
int main() {
    srand(time(NULL));
    PBYTE originalBytes = NULL;
    originalBytes = new BYTE[rand()%3];
    size_t originalBytesSize = (originalBytes == NULL) ? 0U : _msize(originalBytes) / sizeof(*originalBytes);
    cout << originalBytesSize << endl;
}
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,038
Записей в блоге: 1
24.09.2021, 16:59
Цитата Сообщение от NoobasProgramas Посмотреть сообщение
Не совсем понимаю, я её иногда использую
В C++ функции _msize нет. Это расширение компилятора от Microsoft.
И еще то что вернет _msize может отличаться от того, что вы ожидаете.
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
24.09.2021, 18:00
Цитата Сообщение от NoobasProgramas Посмотреть сообщение
Не совсем понимаю, я её иногда использую
Получаете непереносимый код.
Цитата Сообщение от NoobasProgramas Посмотреть сообщение
чтоб не нагружать программу лишними переменными(в частности классы)
Вы не можете выделить память не передав системе затребованный размер. Потерять данные, это не подвиг, а неприятность. А классы не перегружают, если вы их используете осознанно.
0
фрилансер
 Аватар для Алексей1153
6496 / 5727 / 1133
Регистрация: 11.10.2019
Сообщений: 15,293
13.09.2023, 17:43
Цитата Сообщение от NoobasProgramas Посмотреть сообщение
чтоб не нагружать программу лишними переменными
так используй std::vector ))

Добавлено через 53 секунды
ой, стартема, оказывается
0
-4 / 1 / 0
Регистрация: 15.01.2014
Сообщений: 25
01.02.2025, 06:22
Я делаю всегда так. Первые 2 байта сразу после создания выделяются под размер массива и все действия с массивом начинаются индекса 2. Очень удобно и всегда под рукой.

C++
1
2
3
4
5
6
7
8
9
10
#define MAKE16(high, low) (WORD)(low & 0xff | ((high & 0xff) << 8))
#define LOBYTE(low)  (BYTE)(low & 0xff)
#define HIBYTE(high) (BYTE)((high >> 8) & 0xff)
 
Create() 
{ 
   File = new char[hParam]; 
   File[0] = HIBYTE(hParam); 
   File[1] = LOBYTE(hParam);
}
Получить размер из любого места:
C++
1
short Len = MAKE16(File[0], File[1]);
0
фрилансер
 Аватар для Алексей1153
6496 / 5727 / 1133
Регистрация: 11.10.2019
Сообщений: 15,293
01.02.2025, 06:39
id866999, это кривой велосипед, прекращай так делать уже

в стандартной библиотеке есть std::string, std::vector и много ещё интересного и полезного

Добавлено через 22 секунды
а про макросы вместо функций в C++ вообще надо забыть
2
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6315 / 3039 / 1055
Регистрация: 01.06.2021
Сообщений: 11,587
01.02.2025, 13:03
Цитата Сообщение от id866999 Посмотреть сообщение
Я делаю всегда так.
я так понимаю, ты научился копировать текст с minwindef.h и вставлять в свой код
0
-4 / 1 / 0
Регистрация: 15.01.2014
Сообщений: 25
05.02.2025, 17:31
Я так понимаю ты меня хочешь пропоносить что я ассемблер не использую в объявлении переменных? Да я ворую самое полезное и вставляю в свой код чтобы его укоротить и лишний раз не ломать голову что это такое. Да я хорошо научился работать с бинарными числами и 8-битными массивами. Это моя сильная сторона. Я пишу TCP пакеты как никто в мире не пишет.
0
фрилансер
 Аватар для Алексей1153
6496 / 5727 / 1133
Регистрация: 11.10.2019
Сообщений: 15,293
05.02.2025, 17:55
Цитата Сообщение от id866999 Посмотреть сообщение
как никто в мире не пишет
охотно верится
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
05.02.2025, 17:55

Узнать размер динамического массива
Здравствуйте. Пытаюсь сделать динамический массив и вывести его размерность. Выводится размерность = 4, подскажите пожалуйста где я...

Изменить размер динамического массива
Дан класс, который описывает двумерный массив class matr{ private: int **matrix; int rows, columns; Создается объект myMatrix,...

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

Можно ли менять размер динамического массива?
Здравствуйте.Такой вопрос: можно ли изменить размер динамического массива.Допустим я задал динамический массив таким образом: int...

Размер динамического массива. Маленькая деталь)
Текст задания:Программа должна создать два массива со случайными элементами из диапазона , по 10 элементов в каждом массиве, вывести каждый...


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

Или воспользуйтесь поиском по форуму:
30
Ответ Создать тему
Новые блоги и статьи
тв 16 бой ии
anaschu 27.07.2026
Великий Перелом ИИ: Как уравнения ОДУ Radau дожали цензурные фильтры Алисы Фиксируем в мемофонде Теории Всего беспрецедентный факт в истории ИИ-зондирования. В затяжном многораундовом. . .
мв 15. непроверенное, возможно, глюк
anaschu 27.07.2026
НАУЧНО-АНАЛИТИЧЕСКИЙ ОТЧЕТ. РАЗДЕЛ 1. 1: «НАУКА» (РАСШИРЕННАЯ СТЕХИОМЕТРИЧЕСКАЯ И ГЕНЕТИЧЕСКАЯ ВЕРСИЯ)Тема: Теоретическое обоснование инвариантности 19-мерного тензорного ядра непрерывных ОДУ и. . .
Очистка реквизитов и табличных частей документа при копировании
Maks 26.07.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРаботу", разработанного в КА2. Задача: Заменить алгоритм запрета копирования документов для сотрудников с ролью "Стажер",. . .
Доктрина интенционального знания - Доктрина для портала "Срез".
Hrethgir 25.07.2026
Может найдётся кто захочет оценить доктрину. . . Написания правил участия для меня роскошь, требующая лимита времени, поэтому все сообщения не прошедшие модерацию будут видны только участникам портала,. . .
сукцессия 44. Решил подать на припринт в межународные сервисы препринтов. Но нужно одобрение от ученых
anaschu 25.07.2026
Английский вариант. Пока кто то не одобрит мою личность, мне не получиться это опубликовать на препринте. Но заявку на публикацию статьи я сегодня подам.
сукцессия 43. Вторая научная статья за месяц- прайминг и гатгил
anaschu 25.07.2026
две стороны одной монеты
Более приземисто - Эстафету хвоста в .cdl (деревья эстафеты в сад).
Hrethgir 24.07.2026
В будущем, после написания блока инверсии обхода дерева (эстафеты хвоста), я планирую вернуться к нашему прошлому разговору о том, обладают ли знания целеполаганием. Тогда я пришел к выводу, что. . .
Вот представьте что вам дали бессмертие.
kumehtar 24.07.2026
Вот представьте что вам дали бессмертие, ничего более не меняя. Вообще ничего, только бессмертие в нынешнем виде. Рады были бы? Что бы вы тут делали всё это время? Никакой пенсии. Никакого нового. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru