Если вы просто хотите передать динамический массив, инкапсулированный в std::vector
, в подпрограмму c
, вы можете передать указатель на заголовок базового массива в виде:
std::vector<char> myvector;
// size-up myvector as needed
foo(&myvector[0]); // pass a pointer to start of myvector to function foo
c++
Стандарт гарантирует, что базовый массив в std::vector
всегда является смежным.
Надеюсь, это поможет.
РЕДАКТИРОВАТЬ: В то время как объявление char values[x][y]
создает «массив массивов» памяти для values
на самом деле будет просто непрерывным блоком, по сути char linear_values[x * y]
.
Если вы добавите в std::vector
число элементов x * y
, это даст вам то же базовое динамически распределенное пространство массива.
Функция c
получит доступ к массиву впорядок основной строки, поэтому первый ряд элементов будет первым, затем вторая полная строка и т. д. *