|
443 / 74 / 7
Регистрация: 29.01.2018
Сообщений: 1,274
|
||||||
В чем разница между динамическим массивом и статическим?07.01.2019, 11:59. Показов 58072. Ответов 220
Метки нет (Все метки)
ребята, я не понимаю различия. вроде читал литературу.
ну вот говорят, что динамический массив, это массив выделение памяти под который будет происходит в процессе выполнения программы. и тут я залез в онлайн компилятор (с++ 14) и сделал так
0
|
||||||
| 07.01.2019, 11:59 | |
|
Ответы с готовыми решениями:
220
Разница между статическим и динамическим полиморфизмом В чем разница между вектором и массивом В чем разница между обычным массивом и контейнером |
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
|||
| 09.01.2019, 22:45 | |||
|
Опять же. Речь о С++ а не про платформы
0
|
|||
|
Неэпический
|
|||||||
| 09.01.2019, 22:47 | |||||||
std::string::operator[]
0
|
|||||||
| 09.01.2019, 22:51 | |
|
2
|
|
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
|
| 09.01.2019, 22:59 | |
|
HelicopterK52,
Если что то документировано то это другое дело. Я же говорю про то что не документировано и с точки зрения с++ а не конкретных платформ
0
|
|
| 09.01.2019, 23:07 | ||
|
Банальный пример - запись по не выровненному адресу. На каких-то платформах это будет нормально работать, а на каких-то вывалится здоровенная аппаратная ошибка. Как стандарт c++ должен подобное документировать? Только как undefined (или unspecified) behavior.
0
|
||
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
||
| 09.01.2019, 23:09 | ||
|
0
|
||
| 09.01.2019, 23:16 | ||
0
|
||
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
|
| 09.01.2019, 23:20 | |
|
HelicopterK52,
Согласен, этим никто не спорит... Платформозависимые фичи часто используется Я против документированного поведения ничего не имею Конкретно в данном случае речь о том что, "я думаю что будет работать так", а гарантий нет. Тут даже конкретная платформа не обсуждалась Тоже понимаю что работать скорее всего будет и даже писал об этом но гарантий нет Речь об этом...
0
|
|
|
285 / 176 / 21
Регистрация: 16.02.2018
Сообщений: 666
|
|||||||
| 09.01.2019, 23:24 | |||||||
|
Теперь подробнее. Есть объект a типа int[3][3]. Что является значением указателя pa, инициализированного как int * pa =reinterpret_cast<int*>(a);?Ну, во-первых, a попадает под array-to-pointer conversion, т.к. reinterpret_cast между указателями требует prvalue аргумент, а
reinterpret_cast<int*>(a) преобразует указатель с типом int(*)[3], со значением "указатель на нулевой элемент массива a —a[0]".reinterpret_cast<int*>(a) определён как static_cast<int*>(static_cast<void*>(a)) https://timsong-cpp.github.io/... ret.cast#7Каст к void* не меняет значения указателя
Про static_cast<int*>(...):
b типа T == int, конечно, есть по адресу A, который представляет указатель static_cast<void*>(a). Но объект a[0] типа int[3] не является pointer-interconvertible со своим первым элементом типа int (см. https://timsong-cpp.github.io/... onvertible)Значит, static_cast<int*>(...) не меняет значения указателя и он по-прежнему указывает на a[0].Итак, имеем переменную int * pa =reinterpret_cast<int*>(a); с типом int* и значением указатель на a[0].Теперь к арифметике указателей.
pa значения от 0 до 3. pa указывает на a[0], следовательно, pa + 2 указывает на a[2]. Естественно, напрягает тот факт, что указатель с типом int* указывает на объект с типом int[3]. Про это написано чуть ниже
int и int[3] are not similar.Вот и UB. То, что тут массив двумерен, а там был трёхмерен — не играет существенной роли.
2
|
|||||||
| 09.01.2019, 23:40 | ||
|
Важно понять, что язык, как и его библиотека - это лишь причиндалы, это они подгоняются под платформы, а не наоборот.
0
|
||
|
285 / 176 / 21
Регистрация: 16.02.2018
Сообщений: 666
|
|
| 09.01.2019, 23:50 | |
|
В качестве упражнения можете попробовать найти UB при попытке что-то прочитать через
pa (типа int j = *pa;). (Наверное это слишком просто для упражнения).
0
|
|
|
Комп_Оратор)
|
|||
| 10.01.2019, 00:06 | |||
|
Указатель на определённый байт, является переменной хранящей его адрес. Тип значения по указателю не тип одномерного массива int[3] а это тип int и это значит, что индекс исходного массива равно как и подмассивов тут вообще не причём. Просто указатель указывает на первый элемент. И пользуясь индексированием по указателю - мы имеем законное право пройти хоть всю память. Но мы идём лишь до последнего элемента. Что не так? Стрикт алиайзинг? Сам компилятор пользуется адресной арифметикой. Я не имел ввиду такие экзотические типы как bool (обычно 1 байт) и не думаю, что выравнивание как-то может помешать. Это потому, что размер массива всегда равен n*sizeof(T) если количество элементов n (независимо от количества измерений), а Т - тип конечного элемента.Добавлено через 10 минут int об этом не догадывается и ему-то, как раз, не нужно слабительное.
1
|
|||
|
285 / 176 / 21
Регистрация: 16.02.2018
Сообщений: 666
|
|||
| 10.01.2019, 00:09 | |||
|
0
|
|||
|
Комп_Оратор)
|
||
| 10.01.2019, 00:28 | ||
|
Что касается некорректности обращения к адресному пространству массива через указатель на его первый элемент - не убедительно. Вообще.
0
|
||
|
285 / 176 / 21
Регистрация: 16.02.2018
Сообщений: 666
|
|
| 10.01.2019, 12:22 | |
|
Всё-таки нужно сделать финальное уточнение. UB ещё до выхода за границы наступает в C++17. До C++17 UB будет из-за выхода за границы.
0
|
|
|
1685 / 513 / 107
Регистрация: 17.05.2015
Сообщений: 1,524
|
||||||||||
| 10.01.2019, 13:13 | ||||||||||
int. Так что очень даже similarЕщё, ожидаемо, что двух-мерный массив : int a[][3] ={ {1,2,3}, {4,5,6}, {7,8,9} }; будет хранить свои элементы в памяти именно в такой последовательности, в какой они указанны при инициализации. Вот так: один за другим, в одном непрерывном блоке памяти. Ещё, ожидаемо, что указатель: int* pa =reinterpret_cast<int*>(a);Будет указывать на первый элемент двух-мерного массива. И теперь, почитав внимательно раздел 8.7 Additive operators, Вы верно поймете, что указатель p1:
4поведение определено: по адресу, который хранит p1 обязан находиться объект типа int, со значением 4.Добавлено через 2 минуты Я понимаю, что некоторые люди - альтернативно одаренные. Мыслят каким то странным образом. Всё же, где вы там увидели выход за пределы диапазона? ![]() Добавлено через 21 минуту ![]() Чужую память даже просто читать нельзя, без риска нарваться на access violation Добавлено через 3 минуты
1
|
||||||||||
|
4150 / 2728 / 433
Регистрация: 09.09.2017
Сообщений: 12,095
|
|||||||||||
| 10.01.2019, 13:44 | |||||||||||
|
Примерно этим пользуются при вызове функций memset(), memcpy() и т.п.: неважно сколько измерений у массива, это просто непрерывный блок байтов. . Ну и вернусь немного назад во времени чтобы разобраться с порядком хранения элементов в многомерном массиве. Похоже, моя первая модель была неудачной, попробую другую:
0
|
|||||||||||
|
1685 / 513 / 107
Регистрация: 17.05.2015
Сообщений: 1,524
|
|||
| 10.01.2019, 13:58 | |||
|
Это же UB. Есть ссылочка на pdf? (C++03: N1577, N1655, N1733)
0
|
|||
|
Неэпический
|
||
| 10.01.2019, 14:08 | ||
return *"";Ну и, скорее всего, там в любом случае есть нолик в конце строки. Не выделять же каждый раз память под c_str,поэтому return data[pos] будет нормально работать.
0
|
||
| 10.01.2019, 14:08 | |
|
В чем разница между массивом строк и List<string>? Разница между статическим и экземплярным методом В чем разница между простым линейным списком, и динамическим линейным списком? Разница между массивом структур и очередью VPN не подключается со статическим IP-адресом (ошибка 720), с динамическим — все работает Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Baragoz - DPS/HPS бот для WoW 3.3.5a, многоязычный
AmbA 26.10.2026
Хотите ещё ботов? У меня есть один! А я пока отдохну от него.
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=12062&stc=1&d=1793007952
Инструкция внутри.
Сразу отвечу: А в PvP с ним. . .
|
Особенности gif сгенерированных в Си
russiannick 21.10.2026
Рассмотрим генерацию gif файлов, которые в Си имеют свои особенности.
Gif представляет собой графический формат популярный в интернете. Посмотрим на палитру. Gif файл сгенерированный в си отличается. . .
|
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version
Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
|
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер
На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
|
|
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/
TL DR
Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
|
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык.
Возвращает он вот это:
https:/ / i. **********/ vqBWLe2. png
Нужную строчку в 3й колонке просто выдумал. .
Это. . .
|
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor.
Это. . .
|
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js.
В помощники взял Яндекс-Алису.
Было создано три зала на разные интересы.
исторические и ретро
сериал Хичкок. . .
|