Size: a a a

2021 March 14

IA

Ilia Abernikhin in pro.cxx
Sergey Skvortsov
Не прилетел, чяднт?
#include <sys/mman.h>
#include <iostream>

int main() {
   int* x = (int*)mmap(nullptr, sizeof(int), PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS | MAP_FIXED, -1, 0);
   std::cout << x << std::endl;
   std::cin >> *x;
   std::cout << *x << std::endl;
}

λ sudo ./mmap          
[sudo] password for sskvor:
0
123
123
Хах, так то через системный вызов, сомневаюсь в стандартности этого кода😂
источник

SK

Stas Koynov in pro.cxx
Побитый Кирпич
> мы сишники думаем что двухмерный можно обходить как одномерный и даже через указатель

Просто вам ничего больше и не остаётся мухахаха
ну мы это делаем и на ++, за что вы нас четвертуете :)
источник

MK

Mikhail Kalugin in pro.cxx
Stas Koynov
ну я думаю оффтоп. мы сишники думаем что двухмерный можно обходить как одномерный и даже через указатель. Вы говорите что стандарт этого не разрешает и это УБ. все можно ставить точку!. 90% кода в мире это УБ. осталось дождаться новой версии компилятора, который оптимизирует его и просто выкинет. вот тогда наконец опенцв начент норм работать. а то тормазит ужас особенно на расбери...
Мда... А я то думал а оно то оказалось... Как-то считал что многомерный массив все равно просто непрерывный кусок памяти, по которому можно ходить как угодно...
источник

VS

Vlad Serebrennikov in pro.cxx
Liber Azerate
Кстати, я не уверен, что не разрешает. Мне кажется, данный пункт несколько проясняет:
http://eel.is/c++draft/dcl.array#9
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 и так далее
источник

VS

Vlad Serebrennikov in pro.cxx
Vlad Serebrennikov
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 и так далее
источник

IZ

Ilia Zviagin in pro.cxx
Liber Azerate
Пока что основное утверждение, что не разрешает. И это сложно оспорить :)
Да с чего?
Они там приводят пункт что нельзя указателю бегать за пределы массива, ну так оно и не бегает...
источник

IZ

Ilia Zviagin in pro.cxx
Vlad Serebrennikov
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 и так далее
И что с того?
источник

VS

Vlad Serebrennikov in pro.cxx
Ilia Zviagin
И что с того?
Otherwise, the behavior is undefined.
источник

LA

Liber Azerate in pro.cxx
Vlad Serebrennikov
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 и так далее
Да, я сейчас так смотрю, судя по всему, результирующее выражение должно указывать именно на одну из этих размерностей. Сейчас пытаюсь собрать все пункты стандарта, указывающие на это :)
источник

IZ

Ilia Zviagin in pro.cxx
Vlad Serebrennikov
Otherwise, the behavior is undefined.
Ну так ты не выходишь за пределы этого объекта.
Массив массивов , ОДИН массив
источник

VS

Vlad Serebrennikov in pro.cxx
Ilia Zviagin
Ну так ты не выходишь за пределы этого объекта.
Массив массивов , ОДИН массив
именно что не один массив, а массив массивов
источник

IZ

Ilia Zviagin in pro.cxx
Vlad Serebrennikov
именно что не один массив, а массив массивов
Алло, Массив один.
Это один объект, со всех точек зрения.
источник

SS

Sergey Skvortsov in pro.cxx
Ilia Zviagin
Ну так ты не выходишь за пределы этого объекта.
Массив массивов , ОДИН массив
Массив в стандарте C++ определен только одномерный
источник

IZ

Ilia Zviagin in pro.cxx
Sergey Skvortsov
Массив в стандарте C++ определен только одномерный
Да ты шо?
источник

SS

Sergey Skvortsov in pro.cxx
О сколько нам открытий чудных готовят просвещенья дух
источник

IZ

Ilia Zviagin in pro.cxx
Sergey Skvortsov
Массив в стандарте C++ определен только одномерный
А у меня наверное альтернативный стандарт,
Я ж забыл...
источник

IA

Ilia Abernikhin in pro.cxx
Я предлагаю подвести в этом споре черту: если бы мне довелось делать ревью такого кода, побил бы палками это ужасно, и так делать не стоит, но если уж прям ооочень надо, то так тому и быть за последствия (если будут) отвечаете сами)
источник

VS

Vlad Serebrennikov in pro.cxx
Ilia Zviagin
Алло, Массив один.
Это один объект, со всех точек зрения.
массив массивов это иерархия подобъектов
то есть int[N][M] это не просто сахар над int[N*M]
источник

VS

Vlad Serebrennikov in pro.cxx
по крайней мере с точки зрения объектной модели
источник

IZ

Ilia Zviagin in pro.cxx
Ilia Abernikhin
Я предлагаю подвести в этом споре черту: если бы мне довелось делать ревью такого кода, побил бы палками это ужасно, и так делать не стоит, но если уж прям ооочень надо, то так тому и быть за последствия (если будут) отвечаете сами)
Нет, ты неправ.
Ещё раз, нет способа передать многомерный массив в функцию. Только через pointer decay, где массив автоматом становится одномерным
источник