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

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

46 ответов

22 просмотра

Ты вообще в курсе что в С нет возможности передать многомерный массив в функцию, и только с помощью такого вот трюка и можно его обрабатывать. Никакого 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
Там вообще не это сказано - там говорится, что есл...

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

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта