cs205-lecture-examples

Example codes used during Harvard CS205 lectures
git clone https://git.0xfab.ch/cs205-lecture-examples.git
Log | Files | Refs | README | LICENSE

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 }