Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.76/263: Рейтинг темы: голосов - 263, средняя оценка - 4.76
 Аватар для pcmax
443 / 74 / 7
Регистрация: 29.01.2018
Сообщений: 1,274

В чем разница между динамическим массивом и статическим?

07.01.2019, 11:59. Показов 58122. Ответов 220
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
ребята, я не понимаю различия. вроде читал литературу.

ну вот говорят, что динамический массив, это массив выделение памяти под который будет происходит в процессе выполнения программы.

и тут я залез в онлайн компилятор (с++ 14) и сделал так
C++
1
2
3
4
5
6
7
8
9
10
11
12
int main(){
 
int n;
std::cin >> n;
int array[n]; // ну я создал посути динамический массив.
 
int *arr;
arr=new int[n]; // здесь тоже. 
return 0;
}
 
значит они оба динамические?
объясните пожалуйста в чем действительно разница между статическим и динамическим массивом, чтобы я мог точно понимать что есть что
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
07.01.2019, 11:59
Ответы с готовыми решениями:

Разница между статическим и динамическим полиморфизмом
Добрый день Подскажите пожалуйста какая разница между статическим и динамическим полиморфизмом и пожалуйста на примере и virtual...

В чем разница между вектором и массивом
Я учу язык С/С++ и хотел у вас спросить в чем разница между вектором и массивом ? кроме тогдо что вектор создается vector<int> m; а...

В чем разница между обычным массивом и контейнером
В чем разница между обычным массивом и контейнером?

220
 Аватар для eva2326
1685 / 513 / 107
Регистрация: 17.05.2015
Сообщений: 1,524
10.01.2019, 20:23
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от DrOffset Посмотреть сообщение
Я вам объясняю что имелось в виду.
Нет.
Имелось ввиду, что в стандартной библиотеке есть вещи,
которые невозможно реализовать переносимо, и без UB.

Не понимаю, чего он до std::less докапался))

Что касается оффсеточки: можно взять любой какой нибудь void*
Честно кастануть его к нужному указателю, и так же пролезть к мемберу.
Результат тот же. Не обязательно же использовать nullptr

А мне же хочется реальных вещей, реализовать которые средствами языка никак не возможно.
0
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
10.01.2019, 20:25
Цитата Сообщение от eva2326 Посмотреть сообщение
Нет.
Что нет?
Вот давай его спросим, правильно я его перевел или нет?

Цитата Сообщение от eva2326 Посмотреть сообщение
А мне же хочется реальных вещей, реализовать которые средствами языка никак не возможно.
И такое есть. Трейт is_union, например.
1
285 / 176 / 21
Регистрация: 16.02.2018
Сообщений: 666
10.01.2019, 20:30
Цитата Сообщение от eva2326 Посмотреть сообщение
Честно кастануть его к нужному указателю
А какой указатель нужный?
0
 Аватар для eva2326
1685 / 513 / 107
Регистрация: 17.05.2015
Сообщений: 1,524
10.01.2019, 20:38
Цитата Сообщение от DrOffset Посмотреть сообщение
Что нет?
Вы не правильно его перевели)

Цитата Сообщение от rat0r Посмотреть сообщение
А какой указатель нужный?
Который указывает на объект нужного вам типа.
0
285 / 176 / 21
Регистрация: 16.02.2018
Сообщений: 666
10.01.2019, 20:40
Цитата Сообщение от eva2326 Посмотреть сообщение
Который указывает на объект нужного вам типа.
Откуда этот объект должен взяться?
0
 Аватар для Toshkarik
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
10.01.2019, 20:50
DrOffset, это все понятно, разговор же про другое совсем был.

Цитата Сообщение от rat0r Посмотреть сообщение
А это что:
Это появилось в документе n4618 от 28.11.2016, под конец C++17.
http://www.open-std.org/jtc1/s... 594r0.html
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78420
Да, я смотрел более ранние драфты и там этого нет. Поэтому ни о каких C++03/11/14 речи не идет.
0
Неэпический
 Аватар для Croessmah
18150 / 10732 / 2067
Регистрация: 27.09.2012
Сообщений: 27,047
Записей в блоге: 1
10.01.2019, 20:51
Toshkarik, посмотрите требования к операндам-указателям операторов отношения
0
 Аватар для Toshkarik
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
10.01.2019, 21:05
Цитата Сообщение от Croessmah Посмотреть сообщение
посмотрите требования к операндам-указателям операторов отношения
Вы про принадлежность к массиву/объекту? Про это в курсе. Или есть что то еще?
0
285 / 176 / 21
Регистрация: 16.02.2018
Сообщений: 666
10.01.2019, 21:40
Цитата Сообщение от Toshkarik Посмотреть сообщение
Да, я смотрел более ранние драфты и там этого нет. Поэтому ни о каких C++03/11/14 речи не идет.
У тебя опять какие-то свои стандарты/драфты. Вот драфт C++11 "C++11 + editorial fixes"
Цитата Сообщение от https://timsong-cpp.github.io/cppwp/n3337/comparisons#8
For templates greater, less, greater_equal, and less_equal, the specializations for any pointer type yield a total order, even if the built-in operators <, >, <=, >= do not.
В драфте 1996-го года написано то же самое.
0
 Аватар для Toshkarik
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
10.01.2019, 22:13
Цитата Сообщение от rat0r Посмотреть сообщение
У тебя опять какие-то свои стандарты? Вот драфт C++11
Мы с вами за столом не сидели, тыкать и упрекать будете друзей своих в подъезде.

Я думал, что все дело в strict total order.

А так, если дело в специализации, то вот она из того же gcc:
C++
1
2
3
4
5
6
7
8
9
10
11
12
// Partial specialization of std::less for pointers.
  template<typename _Tp>
    struct less<_Tp*> : public binary_function<_Tp*, _Tp*, bool>
    {
      _GLIBCXX14_CONSTEXPR bool
      operator()(_Tp* __x, _Tp* __y) const _GLIBCXX_NOTHROW
      {
    if (__builtin_constant_p (__x < __y))
      return __x < __y;
    return (__UINTPTR_TYPE__)__x < (__UINTPTR_TYPE__)__y;
      }
    };
__builtin_constant_p это встроенная функция для оптимизации во время компиляции и не является необходимой.
__UINTPTR_TYPE__ это макрос uintptr_t.

Единственное к чему можно привязаться, это, наверное, отсутствие каста к void* как это рекомендовано при касте указателя к uintptr_t.

То есть такой код вполне должен работать, если uintptr_t определен:

C++
1
2
3
4
5
6
7
8
9
  template<typename _Tp>
    struct less<_Tp*>
    {
      bool
      operator()(_Tp* __x, _Tp* __y) const
      {
    return (uintptr_t)static_cast<void*>(__x) < (uintptr_t)static_cast<void*>(__y);
      }
    };
0
Неэпический
 Аватар для Croessmah
18150 / 10732 / 2067
Регистрация: 27.09.2012
Сообщений: 27,047
Записей в блоге: 1
10.01.2019, 22:26
Toshkarik, да, про это, т.е. для пользовательского кода
C++
1
2
3
4
int * p1 = new int;
int * p2 = new int;
std::less<int*>()(p1, p2);//Хорошо
p1 < p2;//Плохо
Добавлено через 1 минуту
Цитата Сообщение от Toshkarik Посмотреть сообщение
то вот она из того же gcc
Для разработчиков библиотеки нет UB. Как уже сказано выше
Цитата Сообщение от DrOffset Посмотреть сообщение
Было утверждение, что в стандартно-библиотечной части может быть такой код, который будет являться UB в отрыве от нее. Т.е. как только пользователь начнет применять подобный код у себя, то его программа начинает содержать UB. Если же он применяет библиотечную функцию, в которой есть подобный код, то программа пользователя UB не содержит.
0
 Аватар для eva2326
1685 / 513 / 107
Регистрация: 17.05.2015
Сообщений: 1,524
10.01.2019, 22:26
Цитата Сообщение от rat0r Посмотреть сообщение
Откуда этот объект должен взяться?
Ниоткуда.
Объект не нужен, потому что не нужен для оффссеточки.

1.
Кастим из const char* const в любой указатель на данные.


2.
PROFFIT!!!???
0
 Аватар для Toshkarik
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
10.01.2019, 22:28
Цитата Сообщение от Croessmah Посмотреть сообщение
std::less<int*>()(p1, p2);//Хорошо
Не совсем понял, почему это хорошо?

Добавлено через 1 минуту
Цитата Сообщение от Croessmah Посмотреть сообщение
Как уже сказано
Ну опять же, разговор же был о том, что, например, less нельзя реализовать стандартными средствами или без UB. Я пытаюсь показать, что можно и так и сделано. Я не понимаю, что вы пытаетесь донести.
1
285 / 176 / 21
Регистрация: 16.02.2018
Сообщений: 666
10.01.2019, 22:35
Цитата Сообщение от Toshkarik Посмотреть сообщение
Мы с вами за столом не сидели
Слава БОГУ!!!
Цитата Сообщение от Toshkarik Посмотреть сообщение
тыкать и упрекать будете друзей своих в подъезде.
Я себе подобных друзей не завожу

Цитата Сообщение от Toshkarik Посмотреть сообщение
А так, если дело в специализации
Об этом было изначально написано
Цитата Сообщение от rat0r Посмотреть сообщение
std::less для указателей
Цитата Сообщение от Toshkarik Посмотреть сообщение
Единственное к чему можно привязаться, это, наверное, отсутствие каста к void* как это рекомендовано при касте указателя к uintptr_t.
Где такое рекомендуют и чем обосновывают?

Цитата Сообщение от Toshkarik Посмотреть сообщение
То есть такой код вполне должен работать, если uintptr_t определен:
А если не определён? Нужно предъявить полностью переносимую реализацию std::less для указателей. Без "если".
0
Неэпический
 Аватар для Croessmah
18150 / 10732 / 2067
Регистрация: 27.09.2012
Сообщений: 27,047
Записей в блоге: 1
10.01.2019, 22:38
Цитата Сообщение от Toshkarik Посмотреть сообщение
например, less нельзя реализовать стандартными средствами или без UB
Для пользовательского кода сравнение указателей не определено, т.е. если Вы напишите свой less с реализацией сравнения указателей с помощью встроенного <, то с точки зрения языка использование Вашего less приведет к UB, если для переданных указателей результат сравнения будет неопределенным.
Цитата Сообщение от Toshkarik Посмотреть сообщение
Я пытаюсь показать, что можно и так и сделано
Это сделано разработчиками компилятора, в их коде это нормально. И использование std::less для сравнения указателей законно.
Цитата Сообщение от Toshkarik Посмотреть сообщение
Я не понимаю, что вы пытаетесь донести.
То что я процитировал постом выше.
Цитата Сообщение от DrOffset Посмотреть сообщение
то в стандартно-библиотечной части может быть такой код, который будет являться UB в отрыве от нее. Т.е. как только пользователь начнет применять подобный код у себя, то его программа начинает содержать UB. Если же он применяет библиотечную функцию, в которой есть подобный код, то программа пользователя UB не содержит.
В стандартной библиотеке такой код - нормально.
В коде пользователя - плохо.
0
 Аватар для eva2326
1685 / 513 / 107
Регистрация: 17.05.2015
Сообщений: 1,524
10.01.2019, 22:40
Цитата Сообщение от rat0r Посмотреть сообщение
А если не определён? Нужно предъявить полностью переносимую реализацию std::less для указателей. Без "если".
См. требования к типу данных uintptr_t

Добавлено через 2 минуты
Цитата Сообщение от Croessmah Посмотреть сообщение
Для пользовательского кода сравнение указателей не определено, т.е. если Вы напишите свой less с точно такой же реализацией, как в коде стандартной библиотеки, то с точки зрения языка использование Вашего less приведет к UB.
А теперь правильный ответ:
std::less подчиняется ровно точно таким же требованиям/ограничениям в отношении своих аргументов,
как и процедура сравнения двух указателей в юзерском коде.
0
285 / 176 / 21
Регистрация: 16.02.2018
Сообщений: 666
10.01.2019, 22:41
Цитата Сообщение от eva2326 Посмотреть сообщение
Кастим из const char* const в любой указатель на данные.
Можно конкретный код увидеть?
0
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
10.01.2019, 22:42

Не по теме:

eva2326, это твоя спина?

0
 Аватар для eva2326
1685 / 513 / 107
Регистрация: 17.05.2015
Сообщений: 1,524
10.01.2019, 22:43
Цитата Сообщение от _stanislav Посмотреть сообщение
eva2326, это твоя спина?
аха
0
10.01.2019, 22:44

Не по теме:

Тьфу ты, не туда нажал в отзыве, надо будет исправить потом :D

rat0r, дальше с таким хамом не вижу смысла что то обсуждать.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.01.2019, 22:44

В чем разница между массивом строк и List<string>?
А есть ли принципиальная разница между string array1 и List&lt;string&gt; array2 ? И если есть, то в чем она заключается?

Разница между статическим и экземплярным методом
В книге уже несколько раз встречается понятие статического и экземплярного метода, но не поясняется конкретно, в чем между ними разница,...

В чем разница между простым линейным списком, и динамическим линейным списком?
вопрос в теме

Разница между массивом структур и очередью
Поясните пожалуйста разницу между массивом структур и очередью.

VPN не подключается со статическим IP-адресом (ошибка 720), с динамическим — все работает
Всем привет! В магазине имеется VPN соединение подключающееся к серверу на складе. При получении ip-адреса автоматически подключение...


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

Или воспользуйтесь поиском по форуму:
200
Ответ Создать тему
Новые блоги и статьи
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С. Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты:. . .
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию? Фраза «Любая достаточно развитая технология неотличима от магии». . .
За какое время ИИ может подобрать пароль по хешу (рассказывает Джемени ИИ)
zorxor 30.10.2026
Расскажи, Джемени, если известен хэш МД5, например, за сколько ИИ сможет подобрать соответствующий пароль? Искусственный интеллект (ИИ) может подобрать простой или средний по сложности пароль по. . .
Кто убил Suno? Почему наше солнышко погасло? (диалог с ИИ Джемени)
zorxor 30.10.2026
Как убивали Suno. Хронология. «Убийство» музыкальной нейросети Suno — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
Генератор паролей (вариант №2)
Maks 30.10.2026
Обновленная версия ранее созданной обработки. Добавлены следующие реквизиты типа Булево: - Буквы; - Цифры; - Символы. Изменена логика команды "Сгенерировать" и процедуры "ПриОткрытии":. . .
Генератор паролей (вариант №1)
Maks 29.10.2026
Реализация из решения ниже выполнена исключительно по моей инициативе, дабы облегчить себе работу в создании паролей для администрируемых мною сервисов и пользователей. Самым главным критерием для. . .
Установка ChatGPT (Codex) на Windows без использования Microsoft Store
Fabien159 28.10.2026
Здравствуйте всем читающим! Опишу процесс установки ChatGPT (Codex) на Windows, если по каким-то причинам у вас не получается устанавить его через Microsoft Store. И так: 1. Скачиваем с. . .
Программное добавление префикса в нумерацию документов
Maks 27.10.2026
Реализация из решения ниже выполнена в самописной конфигурации на БСП (помощь начинающему коллеге). Задача: Программно добавить префикс в нумерацию документов. Решение: В модуле объекта. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru