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

时间:2019-05-24 20:31:21

标签: c++

//// 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

2 个答案:

答案 0 :(得分:0)

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

#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;
}

pointers-to-pointerspointers-and-arrays上有一些很好的解释

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

答案 1 :(得分:-2)

您想要做的是格式错误,但您需要的是reinterpret_cast

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