Адрес в массиве Dynami c в C ++ - PullRequest
0 голосов
/ 20 апреля 2020

Почему все эти адреса не равны друг другу? & wsk [0] [0] равно wsk [0] и его логика c, но wsk отличается. Почему? Имя массива также является адресом массива.

#include<iostream>

  using namespace std;


int main()
{
    int** wsk = new int* [2];
    wsk[0] = new int[2];
    cout << &wsk[0][0] << endl;
    cout << wsk[0] << endl;
    cout << wsk << endl;

    system("Pause");
    return 0;
}

1 Ответ

1 голос
/ 20 апреля 2020

Вы можете буквально изменить свой код таким образом, чтобы вы лучше его поняли:

int main()
{
    int** wsk = new int* [2];
    int* wsk0 = new int[2], *wsk1 = new int[2];
    wsk[0] = wsk0;
    wsk[1] = wsk1;

Вы генерируете три разных указателя. Первый содержит два указателя. Все три указателя указывают на разделенные адреса.

Следующие конструкции содержат один постоянный указатель, указывающий на непрерывную ячейку памяти, содержащую четыре элемента, поэтому в этом случае & msx будет равен wsk и будет равен & wsk [0] и & wsk [0] [0] также:

int main()
{
    int wsk[2][2]; //in mmemory elements are located one by one
    cout << reinterpret_cast<long>( &wsk) << endl;
    cout << reinterpret_cast<long>( wsk) << endl;
    cout << reinterpret_cast<long>( &wsk[0]) << endl;
    cout << reinterpret_cast<long>( &wsk[0][0]) << endl;
...