void playWithThePixels(void* p, int depth, int pitch, int width, int height);
typedef unsigned char Pixel[4];
std::vector<Pixel[1600]> screen(900);
playWithThePixels(screen.data(), 32, 1600, 1600, 900);
return 0;
И элементы массива C, и std::vector
гарантированно будут непрерывными, поэтому screen
должны располагаться в памяти непрерывно.
Я знаю, что доступ к элементам массива за пределами границ является поведением undefined, но как насчет чтения по указателю, например, в примере кода?
Или что, если вы сделаете
std::cout << screen[0][10000][0];
? Это определенное поведение? Я, очевидно, получаю доступ к выделенной области.
Имеет ли значение чтение элементов массива, прямо или косвенно через указатель?
vector
, вы, кажется, спорите сvector<vector<…>>
. На практике пример OP будет работать (по крайней мере, с использованиемstd::array
), но он нарушает строгие правила стандарта. 06.07.2015