multi_and_flat.cpp (964B)
1 #include <iostream> 2 3 #define N 2 4 #define M 4 5 6 void initialize(int *p) 7 { 8 for (int i = 0; i < N * M; ++i) { 9 p[i] = i; // 0, 1, 2, 3, ... 10 } 11 } 12 13 int main(void) 14 { 15 int A[N][M]; 16 int *p = &A[0][0]; // pointer to first element in A 17 initialize(p); 18 19 // multi-dimensional indexing 20 std::cout << "Multi-dimensional indexing:\n"; 21 for (int i = 0; i < N; ++i) { 22 for (int j = 0; j < M; ++j) { 23 std::cout << '\t' << A[i][j]; 24 } 25 std::cout << '\n'; 26 } 27 28 // flat indexing 29 std::cout << "\nFlat indexing:\n"; 30 for (int i = 0; i < N; ++i) { 31 for (int j = 0; j < M; ++j) { 32 std::cout << '\t' << p[i * M + j]; // j is fastest moving index! 33 } 34 std::cout << '\n'; 35 } 36 37 // representation in memory 38 std::cout << "\nRow-major layout in memory:\n"; 39 for (int i = 0; i < N * M; ++i) { 40 std::cout << '\t' << p[i]; 41 } 42 std::cout << '\n'; 43 44 return 0; 45 }