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

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

11.04.2016, 02:13. Показов 13808. Ответов 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
9005 / 4706 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
11.04.2016, 19:30
Цитата Сообщение от nmcf Посмотреть сообщение
Я говорил, что "динамический" = "в динамической памяти", так по крайней мере в России привыкли, и та книжка подтверждает, хоть и говорится "так называемый".
Как же не понять? Я же говорил, - древнее зло. Массивом, динамически выделенную память называют для удобства. И нет возражений, пока говорящий понимает, что это не массив. Имя массива преобразуется к указателю на первый элемент. Но только там где ожидается указатель. Если применить к нему sizeof то получим размер массива, а не указателя. С указателем на динамическую память ничего похожего на массив не происходит. И не может.
Это важно, именно, в контексте данной темы.
0
 Аватар для Fulcrum_013
2083 / 1574 / 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 / 1574 / 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 / 1574 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
11.04.2016, 20:50
Цитата Сообщение от nd2 Посмотреть сообщение
Массив - это не указатель.
Массив это указатель на его начало. А размер у него есть только в процессе компиляции. Он вообще нигде не записывается. У динамически же распределенного массива этот размер таки в таблицах менеджера кучи есть.
0
11.04.2016, 21:09

Не по теме:

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

0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9005 / 4706 / 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
9005 / 4706 / 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
9005 / 4706 / 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
9005 / 4706 / 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
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru