Есть действительно много возможностей. Они полагаются на непрерывное выделение памяти для массива.
Так что я бы не рекомендовал ни одну из них. Пожалуйста, смотрите:
#include <iostream>
#include <numeric>
constexpr size_t NumberOfRows = 10U;
constexpr size_t NumberOfColumns = 10U;
constexpr size_t NumberOfCells = NumberOfRows * NumberOfColumns;
int main() {
// Definition of our array
int data[NumberOfRows][NumberOfColumns];
// Lambda to print the array on the screen
auto print = [](int(&array2Dim)[NumberOfRows][NumberOfColumns]) { std::cout << "\n\n"; for (size_t r = 0U; r < NumberOfRows; ++r) {
for (size_t c = 0U; c < NumberOfColumns; ++c) std::cout << array2Dim[r][c] << ' '; std::cout << '\n';
}};
// One possible solution
for (int i = 0; i < NumberOfCells; i++) {
*((*data)+i) = i;
}
print(data);
// Other possible solution
for (int i = 0; i < NumberOfCells; i++) {
data[0][i]= i*2;
}
print(data);
// 3rd solution: No loop
std::iota(*data, *data + NumberOfCells, 500);
print(data);
return 0;
}
Кстати. Вы не должны использовать простые массивы C -Style в C ++. Вы не должны использовать необработанные указатели для собственной памяти.