[英]How to pass a 2D arrays of pointers to 3D arrays of pointers (function and class) and return 3d arrays of values in C++?
[英]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.