簡體   English   中英

如何通過C ++中的指針使用3D數組

[英]How to work with 3d arrays through pointers in C++

我在C ++中使用3D數組的指針時遇到一些困難。 我有一個Q[3][N][N]數組,我想傳遞給該函數以在[0][i][j]位置(以及[1][i][j][2][i][j]). 我該如何實現? 使用Q[i][j][0]等會更方便嗎?

對於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;
}

我正在使用相同的方法為3D編寫類似的函數,但該函數不會寫出正確的值:誰能讓我知道指向Q[i][j][1]正確地址的正確方法。 在輸入參數中,我給出了Q [0] [0] [0]的地址。 如果要寫出k的特定值,是否應該使用其他地址(例如Q [i] [j] [1])?

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

示例示例中,N必須為const。 但是考慮使用向量。

#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)數組不是指針。 多維數組不能通過指針傳遞,需要具有除一維之外的所有常量。 這是幫助您理解的答案。

無法將數組轉換為指針

如何將對二維數組的引用傳遞給函數?

http://www.cplusplus.com/forum/articles/17108/

您可能想嘗試使用STL中的向量。

2)僅在使用模板實例時才編譯模板,這就是為什么模板的聲明和用法通常放在一個文件中的原因。 模板編譯

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM