如何解决函数如何访问矩阵?
我有一个函数,并在其上面声明了一个矩阵。
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
可以是成员函数(此类的“方法”)。这样可以将所有内容整齐地打包在一起。成员函数会自动访问其他成员。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。