【问题标题】:Adressess in dynamic array in C++C ++中动态数组中的地址
【发布时间】:2020-04-20 17:18:59
【问题描述】:

为什么所有这些地址不相等? &wsk[0][0] 等于 wsk[0] 和它的逻辑,但 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;
}

【问题讨论】:

  • 数组的名称也是数组的地址。 -- 你的代码中没有数组。你有所有的指针。另外,您将如何delete 您分配的内存?啊哈——两个不同的电话,对吧?所以指针不同是有道理的,不是吗?
  • 您分配的 wsk[0] 与 wsk 不同。您对 new 使用了两个不同的调用。所以这是两个不同的指针。

标签: c++ arrays dynamic


【解决方案1】:

您可以通过这种方式更改您的代码,这样您会更好地理解它:

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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-25
    • 2016-03-12
    • 2018-01-15
    • 1970-01-01
    • 1970-01-01
    • 2023-04-11
    • 1970-01-01
    相关资源
    最近更新 更多