需要一种更好的方法来传递地址arr [0] [2,因为必须在双指针中接收它。
想要通过arr [0] [2]而不存储任何其他变量。
#include <iostream>
using namespace std;
int help(int **arr)
{
cout<<**arr;
}
int main()
{
{
int n=3,m=3,k=0;
int **arr = new int*[n];
for(int i = 0; i < n; i++) {
arr[i] = new int[m];
}
for(int i = 0; i < n; i++) {
for(int j = 0; j < m; j++) {
arr[i][j]=k;
k++;
}
}
int *g=*arr+2;
int **h=&g;
help(h);
}
}
没有更好的方法。不幸的是,C ++语法x[y]
可以用来表示两个截然不同的操作:如果x
是一个数组则在进行索引,如果x
是一个指针,则它们是间接寻址和索引。
如果调用者希望有指向该指针的指针,并且您有一个二维矩阵,则除了实际创建该矩阵中不存在的指针并传递其地址外,您无能为力。
[关于指针数组,带有指针的指针以及带有2d数组的语法,到达元素的语法是x[y][z]
无关紧要,它们是三个非常不同的操作。
为什么不只写
int *p = &arr[0][2];
help( &p );
如果要使用int **类型的指针访问整个数组,则可以使用以下方法。
#include <iostream>
void help(int **arr, size_t n )
{
for ( size_t i = 0; i < n; i++ )
{
std::cout << ( *arr )[i] << ' ';
}
std::cout << '\n';
}
int main()
{
int arr[2][3]={{1,2,3},{4,5,6}};
int *p = reinterpret_cast<int *>( arr );
help( &p, 6 );
return 0;
}
程序输出为
1 2 3 4 5 6