//// 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
答案 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-pointers和pointers-and-arrays上有一些很好的解释
注意:通常不建议使用指针,因为在调试时可能会引起困难,例如内存泄漏或无效的内存访问! 结果,发明了智能指针以防止普通指针的可能后果。您可以看看std::shared_ptr。
答案 1 :(得分:-2)
您想要做的是格式错误,但您需要的是reinterpret_cast
int **ptr=reinterpret_cast<int **>(a);