Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.52/64: Рейтинг темы: голосов - 64, средняя оценка - 4.52
8 / 8 / 5
Регистрация: 28.10.2012
Сообщений: 135

Можно ли обойти динамический массив не зная его размер?

11.04.2016, 02:13. Показов 14388. Ответов 79
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Массив ниже. 
Есть ли способ обойти такой массив используя указатель pArr на него? Не используя count.
 
    int count = 7;
    
    int *pArr = new int[count];
    
    int id = 0;
    while (id < count)
    {
        int value;
        cout << "pArr[" << id << "]=";
        cin >> value;
        pArr[id] = value;
        id++;
    }
    
    delete pArr;
        
    _getch();
    return 0;
1
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
11.04.2016, 02:13
Ответы с готовыми решениями:

Как создать двумерный динамический массив не зная его размеров?
Привет. Не смог найти в гугле как можно создать двумерный динамический массив не зная его длины вообще. Нашел только создание...

Можно ли создать массив, изначально не зная его размерности?
Доброго времени суток. Формируется некая последовательность (https://www.cyberforum.ru/pascalabc/thread1962554.html#post10342225) Нужно...

Можно ли задать массив, не зная заранее его длину?
Доброе утро всем. Вчера начал читать &quot;главу 4 Массивы&quot;. Там предложили 2 варианта объявления массива: 1) неинициализированный int...

79
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
11.04.2016, 19:24
Студворк — интернет-сервис помощи студентам
Я говорил, что "динамический" = "в динамической памяти", так по крайней мере в России привыкли, и та книжка подтверждает, хоть и говорится "так называемый".
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
11.04.2016, 19:30
Цитата Сообщение от nmcf Посмотреть сообщение
Я говорил, что "динамический" = "в динамической памяти", так по крайней мере в России привыкли, и та книжка подтверждает, хоть и говорится "так называемый".
Как же не понять? Я же говорил, - древнее зло. Массивом, динамически выделенную память называют для удобства. И нет возражений, пока говорящий понимает, что это не массив. Имя массива преобразуется к указателю на первый элемент. Но только там где ожидается указатель. Если применить к нему sizeof то получим размер массива, а не указателя. С указателем на динамическую память ничего похожего на массив не происходит. И не может.
Это важно, именно, в контексте данной темы.
0
 Аватар для Fulcrum_013
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
11.04.2016, 19:53
Цитата Сообщение от nofx Посмотреть сообщение
Есть ли способ обойти такой массив используя указатель pArr на него? Не используя count
Есть. Пометить соответствующим терминатором конец массива. Типа как в строке терминатор - символ обозначающий конец строки(обычно 0) Но естественно в самом массиве это значение не должно присутствовать.

Добавлено через 2 минуты
Цитата Сообщение от IGPIGP Посмотреть сообщение
. И нет возражений, пока говорящий понимает, что это не массив. Имя массива преобразуется к указателю на первый элемент.
Нам по другому объясняли. Массив в C и C++ это указатель на его начало. Неважно где он выделен, но это именно указатель на его начало. И нет никаких a[i]. Это выдумки высоких абстракций. На самом деле есть *(a+i)
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
11.04.2016, 20:16
Fulcrum_013,
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
11.04.2016, 20:16
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Массив в C и C++ это указатель на его начало. Неважно где он выделен, но это именно указатель на его начало.
Массив и указатель - это разные типы данных.
Цитата Сообщение от IGPIGP Посмотреть сообщение
Если применить к нему sizeof то получим размер массива, а не указателя.
Потому, что размер массива является частью этого типа.
1
 Аватар для Fulcrum_013
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
11.04.2016, 20:34
Цитата Сообщение от nd2 Посмотреть сообщение
Потому, что размер массива является частью этого типа.
Цитата Сообщение от nd2 Посмотреть сообщение
Массив и указатель - это разные типы данных.
Массив это константный указатель на область данных в стеке или сегменте данных. Именно поэтому размер вычисляем на этапе компиляции. Правда не в элементах а в байтах.
Указатель же неконстантный и размер того на что он указывает при компиляции неизвестен.
Да кстати, я так думаю существуют соответствующие функции менеджера кучи (только скорее всего недокументированные) которые позволяют узнать размер блока кучи на который указывает указатель. А знать этот размер менеджер кучи просто обязан. при удалении куска памяти размер никто не указывает. Значит менеджер кучи его и сам знает.
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
11.04.2016, 20:42
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Массив это константный указатель
Массив - это не указатель.
Цитата Сообщение от nd2 Посмотреть сообщение
Массив и указатель - это разные типы данных.
Передача по ссылке двумерного динамического массива в функцию
1
 Аватар для Fulcrum_013
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
11.04.2016, 20:50
Цитата Сообщение от nd2 Посмотреть сообщение
Массив - это не указатель.
Массив это указатель на его начало. А размер у него есть только в процессе компиляции. Он вообще нигде не записывается. У динамически же распределенного массива этот размер таки в таблицах менеджера кучи есть.
0
11.04.2016, 21:09

Не по теме:

Одни про Фому, другие про Ерёму...
Вы хоть когда доказываете своё - объясняйте почему так. Тут каждый прав по-своему, только толку от ваших споров нет. Хотите показать себя с лучшей стороны? Каждый хочет "вывернуться" дабы не выглядеть дураком? Аплодисменты!

0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
11.04.2016, 21:42
nmcf, вот смотрите:
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Массив это указатель на его начало.
О том я и говорю. Если бы не было вреда от применения обще программистского понятия "массив" там где ожидается тип С++, то и вреда бы не было.
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
. Пометить соответствующим терминатором конец массива.
Во-первых это читерство, а во вторых для таких типов как int нет терминатора. Это не шарп с типами nullable.
castaway, всё началось, именно при обсуждении топика. Там русским по белому написано "массив", на что rikimaru2013 возразил. И к месту. Потому, что отсюда начинается и охота поискать размер. Ведь у массивов бывает непереносимая и недокументированная возможность определения размера по указателю. Хотя если как массив передать , то оно и так есть.
castaway, всё это настолько многословно и многонюанстно, что хочется просто помолчать. Иначе слов немеряно, а толку мало. Тут ты прав.
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
11.04.2016, 21:47
Это, вероятно, теоретики придумали после, что есть тип массив, а есть указатель привязанный к блоку памяти, который не массив. А механизм работы в основе один и тот же - указатель, о чём Fulcrum_013 и сказал.
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
11.04.2016, 21:50
Цитата Сообщение от nmcf Посмотреть сообщение
а есть указатель привязанный к блоку памяти,
Указатель ни к чему не привязан. Вы можете указатель на переменную разыменовать по индексу ноль. Тут скобки - обёртка над адресной арифметикой и нет ничего кроме видимости массива. Fulcrum_013, аргументируя этим доводом не видит, что противоречит себе.
Цитата Сообщение от nmcf Посмотреть сообщение
Это, вероятно, теоретики придумали после, что есть тип массив
Злые дядьки... После чего же они такое придумали! Не после домино, как пить дать.
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
11.04.2016, 21:52
Ну а у true-массива индекс - это что? Та же арифметика - достаточно взглянуть на ассемблерный код.
0
11.04.2016, 21:55

Не по теме:

IGPIGP, я всё понимаю. Термин "массив" можно интерпретировать по-разному, что вы (со всеми остальными) и делаете. "Глобальная" интерпретация этого термина в отношении к C++ - это лишь частный случай.

0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
11.04.2016, 21:55
Цитата Сообщение от nmcf Посмотреть сообщение
Ну а у true-массива индекс - это что? Та же арифметика
Да именно так, но то что у слона, как и кота есть уши не означает что слон, это кот. У слона есть хобот. А на хоботе написан размер. Хотя в выражении слон преобразуется к коту. Если ожидается константный кот. Ёжкин кот например.
0
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
11.04.2016, 21:57
Учитывая тематику вопроса я подумал, что будет важно указать на ошибку вначале, иначе всеравно прийдем к цитате с стандарта С++, что такое массив и куску кода:
C++
1
2
3
4
5
template<typename T, std::size_t N>                 
std::size_t arraySize(T(&)[N])                      
{
    return N;
}
Думаю по определению указателя можно понять, что размерность, на которую он указывает, он характеризует. Поэтому ответ на топик уже "Нет". И если в темке будут куча хаков и рекомендаций, то рано или поздно прийдем к тому "классу-обёртке" о котором я написал. Всем добра)
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
11.04.2016, 21:59
IGPIGP, почему тебя так размер волнует? Это главный признак правильного массива? Используя new мы тоже размер знаем. Просто получается более низкоуровневый массив - меньше встроенных средств для работы с ним, уровень абстракции другой.
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
11.04.2016, 21:59
Цитата Сообщение от castaway Посмотреть сообщение
Термин "массив" можно интерпретировать по-разному
Именно. Я как раз за то, чтобы каждый раз это было к месту, а не путать божий дар с яичницей. Посмотри порядок обсуждения и увидишь. Да я и писал уже.
castaway, тут ТС уже всё сказали. Дальше разговор о устойчивых и вредных стереотипах. Он имеет самостоятельную ценность, так как касается уже людей с некоторым опытом.
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
11.04.2016, 22:01
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
Поэтому ответ на топик уже "Нет".
Ответ на топик уже "нет" хотя бы потому, что изначально неизвестен размер.
0
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
11.04.2016, 22:04
castaway, тоесть мой ответ не верный и мне не полагается балл?(
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.04.2016, 22:04
Помогаю со студенческими работами здесь

Как правильно передать динамический массив в функцию, увеличивающую его размер, чтобы изменения сохранились
Извиняюсь за совсем нубский вопрос, похожее не нашел. Простая учебная задача - написать функцию, которая добавляет элемент в динамический...

Создать динамический массив, размер которого пользователь вводит с клавиатуры.Заполнить его случайными числами
Кто знает, как на С++: создать динамический массив, размер которого пользователь вводит с клавиатуры. Заполнить его случайными числами из...

Создать массив с нулями и единицами в шахматном порядке, что бы его размер можно было вводить с клавиатуры
Помогите пожалуйста создать массив с нулями и единицами в шахматном порядке, что бы его размер можно было вводить с клавиатуры. Или...

создать массив с нулями и единицами в шахматном порядке, что бы его размер можно было вводить с клавиатуры
Помогите пожалуйста

Рассчитать размер 1 пикселя в мм на мониторе,зная диагональ монитора в дюймах и его разрешения
Рассчитать размер 1 пикселя в мм на мониторе,зная диагональ монитора в дюймах и его разрешения


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru