必须通过双指针接收的arr [0] [2]的传递地址

问题描述 投票:1回答:2

需要一种更好的方法来传递地址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++ multidimensional-array pointer-to-pointer
2个回答
0
投票

没有更好的方法。不幸的是,C ++语法x[y]可以用来表示两个截然不同的操作:如果x是一个数组则在进行索引,如果x是一个指针,则它们是间接寻址和索引。

如果调用者希望有指向该指针的指针,并且您有一个二维矩阵,则除了实际创建该矩阵中不存在的指针并传递其地址外,您无能为力。

[关于指针数组,带有指针的指针以及带有2d数组的语法,到达元素的语法是x[y][z]无关紧要,它们是三个非常不同的操作。


0
投票

为什么不只写

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
© www.soinside.com 2019 - 2024. All rights reserved.