170 похожих чатов

Взять 15 элементов из массива длины в 5?

46 ответов

6 просмотров

Ты вообще в курсе что в С нет возможности передать многомерный массив в функцию, и только с помощью такого вот трюка и можно его обрабатывать. Никакого UB тут нет

Roman
ну и хорошо.

Что хорошо то?

Ilya Zviagin
Ты вообще в курсе что в С нет возможности передать...

арифметика указателей не разрешает «ходить» по частям многомерного массива если очень хочется, то можно считать, что оно работает так же, как работало создание объектов через malloc до 20 стандарта, но не более того

Vlad
арифметика указателей не разрешает «ходить» по час...

> арифметика указателей не разрешает «ходить» по частям многомерного массива c чего бы?

Ilya Zviagin
Разрешает

https://t.me/ProCxx/434644

Vlad
арифметика указателей не разрешает «ходить» по час...

Кстати, я не уверен, что не разрешает. Мне кажется, данный пункт несколько проясняет: http://eel.is/c++draft/dcl.array#9

Liber Azerate
Кстати, я не уверен, что не разрешает. Мне кажется...

Тут ничего нет про представление многомерного через одномерный, да и это ненормативная note Просто прояснение того, как нормальный доступ к многомерному массиву проходит

Liber Azerate
Кстати, я не уверен, что не разрешает. Мне кажется...

Разрешает. Без этого вообще бы ничего не работало

Ilya Zviagin
Разрешает. Без этого вообще бы ничего не работало

Пока что основное утверждение, что не разрешает. И это сложно оспорить :)

Liber Azerate
Кстати, я не уверен, что не разрешает. Мне кажется...

1) прямо там же в примере написано, что многомерный массив это массив массивов. держим это в уме 2) обращаемся к пункту дня expr.add#4.2: if P points to an array element i of an array object x with n element. соответственно, когда мы берем указатель P на элемент i многомерного массива x, то n будет какая-то из размерностей исходного многомерного массива (последняя), но никак не N*M и так далее

Liber Azerate
Пока что основное утверждение, что не разрешает. И...

Да с чего? Они там приводят пункт что нельзя указателю бегать за пределы массива, ну так оно и не бегает...

Ilya Zviagin
И что с того?

Otherwise, the behavior is undefined.

Vlad
1) прямо там же в примере написано, что многомерны...

Да, я сейчас так смотрю, судя по всему, результирующее выражение должно указывать именно на одну из этих размерностей. Сейчас пытаюсь собрать все пункты стандарта, указывающие на это :)

Vlad
Otherwise, the behavior is undefined.

Ну так ты не выходишь за пределы этого объекта. Массив массивов , ОДИН массив

Ilya Zviagin
Ну так ты не выходишь за пределы этого объекта. Ма...

именно что не один массив, а массив массивов

Vlad
именно что не один массив, а массив массивов

Алло, Массив один. Это один объект, со всех точек зрения.

Ilya Zviagin
Ну так ты не выходишь за пределы этого объекта. Ма...

Массив в стандарте C++ определен только одномерный

Sergey Skvortsov
Массив в стандарте C++ определен только одномерный

А у меня наверное альтернативный стандарт, Я ж забыл...

Ilya Zviagin
Алло, Массив один. Это один объект, со всех точек ...

массив массивов это иерархия подобъектов то есть int[N][M] это не просто сахар над int[N*M]

Sergey Skvortsov
Массив в стандарте C++ определен только одномерный

Но массив - тоже легальный тип элемента массива. И в C и в С++ многомерные массивы это массивы массивов.

Vlad
массив массивов это иерархия подобъектов то есть i...

что конкретно тебе дает такое рассмотрение массивов??

Ilya Zviagin
Да ты шо?

как раз Note 3 и говорит о том, как трактуется "многомерный массив" declares an array of three elements, each of which is an array of five elements, each of which is an array of seven integers.

Vlad
https://t.me/ProCxx/434705

я дважды перечитал и не понял. не заставляй перечитывать в третий раз

Vlad
https://t.me/ProCxx/434705

Это лишь жонглирование словами. Тебе объясняют так или иначе.

Ilya Zviagin
Алло, Массив один. Это один объект, со всех точек ...

Собственно вот, смотрим в такой последовательности: http://eel.is/c++draft/dcl.array#1 Число N – это array bound, количество элементов типа Т http://eel.is/c++draft/dcl.array#6 https://eel.is/c++draft/expr.add#4.2 И в данном случае написано n elements, со ссылкой на весь раздел выше. В приведённых же мной ссылках чётко указано, что является этим N. То есть у нас есть N элементов типа Т, где Т, например, тоже массив известного размера в таком случае, выражения вида "указатель на элемент массива" + какое-то число указывает на какой-то из подмассивов. Если мы вышли за границы это массива массивов, то есть за число N этих подмассивов, то у нас UB. Всё, ходить под двумерному массиву как одномерному нельзя

Liber Azerate
Собственно вот, смотрим в такой последовательности...

Я ещё раз говорю, в С и С++ правила определения арифметики указателей одинаковы. В С нет другого способа передать массив в функцию кроме pointer decay. Многомерный он или нет - все равно. Так что все что вы там вычитали - чушь.

Ilya Zviagin
Я ещё раз говорю, в С и С++ правила определения ар...

decay убирает лишь одну размерность http://eel.is/c++draft/conv.array#1

Ilya Zviagin
Я ещё раз говорю, в С и С++ правила определения ар...

То есть то, что прямо написано в стандарте, – чушь? С и С++ разные языки, в конце концов. То, что С++ в определённой степени совместим с С, это факт, да. Но никто не обещал, что один и тот же код на С и С++ будет работать одинаково и будет одинаково валидным. Скорее наоборот

Liber Azerate
То есть то, что прямо написано в стандарте, – чушь...

То что вы проинтерпретировали - чушь, а не стандарт

Ilya Zviagin
То что вы проинтерпретировали - чушь, а не стандар...

нет, если мы передаем [4][4] то это повод для оптимизации, и если эта оптимизация поломает логику, то се ля ви

Ilya Zviagin
Нет, всё

https://godbolt.org/z/xTYean смотри в ошибки

Ilya Zviagin
Какой оптимизации?

векторной, например

Ilya Zviagin
Нет, всё

Илья, @Endill намного более компетентен в этих вопросах, зачем же спорить? Ты всё-таки админ, к тебе люди прислушиваются.

Vlad
decay убирает лишь одну размерность http://eel.is/...

Там вообще не это сказано - там говорится, что если привести массив к указателю, то это будет указатель на его первый элемент и все.

Mikhail Kalugin
Там вообще не это сказано - там говорится, что есл...

конечно я лишь выбрал более простую и короткую формулировку

Похожие вопросы

Обсуждают сегодня

Друзья, за кем?
Magic
12
Anyone here suffers from unexplained aural migraines, who would be up for talking for a bit? Doesn't *have* to be aural, but I am not asking about headaches, I mean actual mi...
Martin Rys
58
Сообщение* в закодированном виде. То есть, просто сделать sendMessage?text=Привет бла-бла! не получится, надо в HEX переводить, и добавлять процент, типа такого: sendMessage?t...
КТ315
21
Всем привет. Кто-то может подсказать, как можно перевести значения Selection поля, если список значений в нем формируется динамически? Я изначально их получаю из selection дру...
Наталья Селезнева
6
А случайно нет ли в паскале штатной возможности передать указатель и количество туда где array of в качестве аргумента?
zamtmn
25
Или даже по-другому вопрос выстрою Есть ли вообще в electron'e для винды, возможность кнопки действий в нотификацию впихнуть ?
Андрей
7
приветы , подскажите что я не так сделал , почему у меня скрипт не работает в программе Revit ? ;Autohotkey_RU IfWinActive ("ahk_exe Revit.exe") ; только в открытом Revit Gu...
Anton Terentev
2
> комьюнити я бы не судил по этому чату. Как мы видели по статам просмотров нескольких телеговских постов, то в чате их набивается 30-40 или даже выше, когда как общаются акти...
Constantin F.
4
void bytes2hex(uint8_t* to, uint8_t* from, uint16_t l) { // len(from) == l; len(to) == l * 2 for (uint16_t i = 0; i < l; ++i) { *(to++) = hex[(from[i] >> 4) & ...
#
3
Ну раз я пока тут, задам пару глупых вопросов. Зачем писать на ассемблере если компилятор довольно умный, а ассемблер много времени занимает? В каких прикладных задачах сейчас...
Максим Рябцев
20
Карта сайта