函数如何访问矩阵?

问题描述

我有一个函数,并在其上面声明了一个矩阵。

int M[100][100];
int function(int row,int col)
{
 if (M[row][col] == 1)return 1;
 return 0;
}

我的问题是,如果我不将其作为参数传递,函数如何访问矩阵,如:

int function(int row,int col,int X[][100])

谢谢。

解决方法

您可以将矩阵设为全局变量(不建议使用),以便能够在函数中访问它而无需将其作为参数传递。关于具有文件作用域全局访问权限的变量与具有过程作用域全局访问权限的变量,请参见this答案。

,

我有一个函数,在它上面声明了一个矩阵

矩阵和函数都在同一声明性区域中声明(似乎在全局命名空间中)。因此,由于在函数定义之前声明了矩阵,所以矩阵声明在函数主体中可见。

这是根据非限定名称查找(C ++ 17 Standard,6.4.1非限定名称查找)

6在作为命名空间N成员的函数的定义中, 在函数的declarator-id之后使用的名称应在之前声明 它在使用它的块或其中一个块中的使用 块(9.3)或应在其在命名空间N中使用之前声明,或者 N是嵌套的名称空间,应在以下其中一种使用前声明 N个封闭的名称空间。

如果要交换矩阵声明和函数定义,例如

int function(int row,int col)
{
 if (M[row][col] == 1)return 1;
 return 0;
}

int M[100][100];

然后,编译器将发出错误,因为在函数主体中使用该名称之前不会找到名称M

,

您已将矩阵设为全局变量,这意味着它可用于在其下定义的所有函数(并且还带有适当的extern声明!)。

使用全局变量并不是最受推荐的方法,因为它会使数据流更难以跟踪和证明。

您可以考虑将矩阵做成一个(数组是该类的 data成员),那么function可以是成员函数(此类的“方法”)。这样可以将所有内容整齐地打包在一起。成员函数会自动访问其他成员。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...