8

所以我有几个问题。首先,如何将 3D 数组传递给函数。我需要传递整个数组,因为函数是运行循环以将数组的内容输出到文件中。这是我目前拥有的

int array[5][3][3]
void function(int a[5][3][3])
{
//...
}
void function(array); //or void function(array[5][3][3]);

我找到了一种使用指向数组的指针使其工作的方法,但是我问过我的老师,他不希望我们使用指针。

我的第二个问题是,如果我打算修改函数内部的全局变量,我不需要将它传递给函数吗?我可以像在 main 中一样在函数中使用它吗?

我现在遇到的另一个问题是将单个值从数组传递到函数中。

在循环中,我需要从 array[i][j][2] 中提取一个值(i 和 j 是外部和内部循环的索引)并将其传递给函数以评估它是否大于 90 . 这是一个学校作业,所以请理解我必须满足某些规范。(比如不使用指针,传递整个数组,传递数组中的一个值,因为作为一个类,我们还没有学会如何使用指针)

4

3 回答 3

10

您的代码是正确的,但实际上在 C++(或 C)中没有数组参数之类的东西。编译器会默默地将您的代码转换为等效的指针类型,即

int array[5][3][3];

void function(int (*a)[3][3])
{
    ...
}

因此,尽管您的教授告诉您不要使用指针,但实际上您无法避免它们,因为在 C++ 中确实没有数组类型参数之类的东西。

第二个问题,全局变量唯一的一点是你可以在任何地方引用它们,所以不需要将它们作为参数传递。

于 2012-11-10T21:27:50.660 回答
5

为了传递复杂的数组,我更喜欢将它们包装在一个结构中:

struct array {
    int a[5][3][3];
};

void function(struct array *a) ...

这避免了尝试将数组作为函数参数传递的许多陷阱。

于 2012-11-10T21:20:57.927 回答
-4

您可以使用指针代替 int ***a

int array[5][3][3]
void dummy(int d[][3][3])
{
     d[1][1][1] = 0;
 }

您也可以将其作为 void * 传递,然后 make

 int array[5][3][2]
 void  function(int* b)
 {
   int i=0;
   int j=1;
   int k=2;
   l[ k*(3*2)+j*(2)+i ] = 9;
 }
 function((int*) array);
于 2012-11-10T21:14:57.583 回答