Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/155.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在C++中通过指针处理3D数组 对于C++中的3D数组指针,我面临一些困难。我有一个Q[3][N][N]数组,我想将其传递给一个函数,以打印[0][I][j]位置以及[1][I][j]和[2][I][j]的值。我怎样才能做到这一点?使用Q[i][j][0]等会更方便吗_C++_Pointers_Multidimensional Array - Fatal编程技术网

如何在C++中通过指针处理3D数组 对于C++中的3D数组指针,我面临一些困难。我有一个Q[3][N][N]数组,我想将其传递给一个函数,以打印[0][I][j]位置以及[1][I][j]和[2][I][j]的值。我怎样才能做到这一点?使用Q[i][j][0]等会更方便吗

如何在C++中通过指针处理3D数组 对于C++中的3D数组指针,我面临一些困难。我有一个Q[3][N][N]数组,我想将其传递给一个函数,以打印[0][I][j]位置以及[1][I][j]和[2][I][j]的值。我怎样才能做到这一点?使用Q[i][j][0]等会更方便吗,c++,pointers,multidimensional-array,C++,Pointers,Multidimensional Array,对于2D,当我将&Q[0][0]赋给*var时,下面的代码工作得很好: template <typename T> void print2d(T *var, int I, int J){ cout << endl; for (int j = 0; j < J; j++){ for (int i = 0; i < I; i++){ cout << setprecision(3) << setw(12) <&l

对于2D,当我将&Q[0][0]赋给*var时,下面的代码工作得很好:

template <typename T>
void print2d(T *var, int I, int J){
cout << endl;
for (int j = 0; j < J; j++){
    for (int i = 0; i < I; i++){
        cout << setprecision(3) << setw(12) << *(var + (N*i + j));
    }
    cout << endl;
}
cout << endl;
}

例如,N必须是常量。 但是考虑使用矢量。

#include <stdio.h>
#include <iostream>
using namespace std;
const int N = 5;

void func2(int* tab, int A, int B, int C)
{
    printf("%d\n", tab[N*N*A + N*B + C] );
}

void func(int tab[3][N][N])
{
    for (int i = 0; i < 3; ++i)
    for (int j = 0; j < N; ++j, printf("\n"))
    for (int k = 0; k < N; ++k)
    {
        printf("%d ", tab[i][j][k]);
    }
}
int main()
{
    int tab[3][N][N];
    int p = 0;
    for (int i = 0; i < 3; ++i)
    for (int j = 0; j < N; ++j)
    for (int k = 0; k < N; ++k)
    {
        tab[i][j][k] = p++;
    }
    func(tab);
    printf("\n");
    func2((int*)tab, 1, 1, 3);
}

我同意亚当的回答,但不能评论,需要更多的分数

1数组不是指针。多维数组不能通过指针传递,需要具有除一个维度外的所有维度常量。下面是一个有助于理解的答案

您可能需要尝试STL中的向量

2模板只有在使用了它的实例时才被编译,这就是为什么它的声明和用法通常放在一个文件中的原因。

到底有什么困难?我们无法帮助解决没有信息的问题。我想为特定ior k编写Q[I][j][k]。N编译时间是否固定?是的,我已将N设置为全局变量,因为它在整个程序中不会更改。@pranav全局变量?它需要是一个可计算的时间常数。变量即使不更改也无法工作。func可以位于不同的文件中吗?我猜你通过了整个阵列,对吗?我如何用指针实现这一点?我更新了示例。func2不是很漂亮,它假设tab在连续内存块中。在指针中,数组是动态分配的,但在本例中并非如此。您可以对func的数组维度使用模板参数,而不是N,因此,您可以支持不同大小的数组。我同意向量可能比数组更方便使用,但是我的程序需要大量计算。类似的matlab程序需要约6小时。我读到向量的便利性是以性能为代价的,这是我想要避免的。如果我错了,请告诉我。向量向量不使用连续存储,因此它可能不适合替代多维数组。然而,不管怎样,使用一维数组并计算偏移量以找到所需的元素并不是那么复杂。
#include <stdio.h>
#include <iostream>
using namespace std;
const int N = 5;

void func2(int* tab, int A, int B, int C)
{
    printf("%d\n", tab[N*N*A + N*B + C] );
}

void func(int tab[3][N][N])
{
    for (int i = 0; i < 3; ++i)
    for (int j = 0; j < N; ++j, printf("\n"))
    for (int k = 0; k < N; ++k)
    {
        printf("%d ", tab[i][j][k]);
    }
}
int main()
{
    int tab[3][N][N];
    int p = 0;
    for (int i = 0; i < 3; ++i)
    for (int j = 0; j < N; ++j)
    for (int k = 0; k < N; ++k)
    {
        tab[i][j][k] = p++;
    }
    func(tab);
    printf("\n");
    func2((int*)tab, 1, 1, 3);
}