我们可以在整数类型的双指针中分配2D整数数组的地址吗?怎么可能

Can we assign the address of 2D integer array in double pointer of integer type?How is it possible?

本文关键字:整数 数组 2D 怎么可能 地址 分配 指针 类型 我们      更新时间:2023-10-16

////main.cpp/////////////////////////////////////////

#include <iostream>
using namespace std;
int main() {
    int a[2][2]={1,2,3,4};
    int **ptr=&a;   

    cout << endl;
    system("PAUSE");
    return 0;
}

编译上述代码时,它给出以下错误

[Error] cannot convert 'int (*)[2][2]' to 'int**' in initialization

通常,不建议使用指针。但是,您可以看一下:

#include <iostream>
int main() {
    int a[2][2] = {{1,2},{3,4}};
    int *ptr1=a[0];
    int *ptr2=&a[0][0];
    int **ptr3=&ptr1;
    int **ptr4=&ptr2;
    std::cout << "the source variable:  " << a[0][0] << std::endl;
    std::cout << "pointer to array:  " << ptr1[0] << ", " << ptr1[1] <<
                                  ", " << ptr1[2] << ", " << ptr1[3] << std::endl;
    std::cout << "pointer to one element:  " << *ptr2 << std::endl;
    std::cout << "pointer to pointer:  " << **ptr3 << std::endl;
    std::cout << "pointer to pointer:  " << **ptr4 << std::endl << std::endl;
    system("PAUSE");
    return 0;
}

指针和指针和指针和阵列可以提供一些很好的解释

注意:通常,不建议使用指针,因为在调试时可能会造成困难,例如内存泄漏或无效的内存访问!结果,发明了智能指针,以防止普通指针的可能后果。您可以看一下std :: shared_ptr。

您要做的是不好的形式,但是您需要的是reinterpret_cast

  int **ptr=reinterpret_cast<int **>(a);