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

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

11.04.2016, 02:13. Показов 14924. Ответов 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,428
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,428
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
Ответ Создать тему
Новые блоги и статьи
Хитросплетение родственных связей пантеона греческих богов.
russiannick 14.05.2026
Однооконник, позволяющий узреть и изучить отдельных героев древней Греции. <!DOCTYPE html> <html lang="ru"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible". . .
[golang] Угол между стрелками часов
alhaos 12.05.2026
По заданным значениям часа и минуты необходимо определить значение меньшего угла между стрелками аналогового циферблата часов. import "math" func angleClock(hour int, minutes int) float64 { . . .
Debian 13: Установка Lazarus QT5
ВитГо 09.05.2026
Эта инструкция моя компиляция инструкций volvo https:/ / www. cyberforum. ru/ blogs/ 203668/ 10753. html и его же старой инструкции по установке Lazarus с gtk2. . .
Нейросеть на алгоритме "эстафета хвоста" как перспектива.
Hrethgir 06.05.2026
На десерт, когда запущу сервер. Статья тут https:/ / habr. com/ ru/ articles/ 1030914/ . Автор я сам, нейросеть только помогает в вопросах которые мне не известны - не знаю людей которые знали-бы. . .
Асинхронный приём данных из COM-порта
Argus19 01.05.2026
Асинхронный приём данных из COM-порта Купил на aliexpress термопринтер QR701. Он оказался странным. Поключил к Arduino Nano. Был очень удивлён. Наотрез отказывается печатать русские буквы. Чтобы. . .
попытка написать игровой сервер на C++
pyirrlicht 29.04.2026
попытка написать игровой сервер на плюсах с открытым бесконечным миром. возможно получится прикрутить интерпретатор питон для кастомизации игровой логики. что есть на текущий момент:. . .
Контроль уникальности выбранного документа-основания при изменении реквизита
Maks 28.04.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРемонтСпецтехники", разработанного в КА2. Задача: уведомлять пользователя, если указанная заявка (документ-основание). . .
Благородство как наказание
Maks 24.04.2026
У хорошего человека отношения с женщинами всегда складываются трудно. А я человек хороший. Заявляю без тени смущения, потому что гордиться тут нечем. От хорошего человека ждут соответствующего. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru