我创建了一个二维动态分配的数组。然后我想输出插槽的地址,因此我可以真正看到它不是连续的内存块。我已经设法通过&tda[i][j]语句来做到这一点。但是,我想知道如何通过使用与*(tda+1)相同的类似&tda[1][0]的方法来做到这一点。例如,如何使用tda[1][1]的组合输出*(tda+1)地址。

#include <iostream>
using namespace std;

int main() {
   int **tda;
   tda = new int*[2];

   cout << tda << endl;
   cout << tda+1 << endl;

   for (int i=0; i<2; i++) {
       tda[i] = new int[2];
   }

   cout << *(tda+1) << endl;

   cout << endl << "Proof that the block of memory is not contiguous:" << endl;
   for (int i=0; i<2; i++) {
       for (int j=0; j<2; j++) {
            cout << &tda[i][j] << endl;
        }
    }


    return 0;
}

最佳答案

好了,您已经提到了a[k]*(a + k)的等效性,但是让我为您说明一下:

&tda[i][j]




&*(tda[i] + j)




*(tda + i) + j


类似地,

tda[i][j]


变成

*(*(tda + i) + j)

09-28 04:03