【发布时间】:2017-06-25 09:59:51
【问题描述】:
我试图理解一些将多维数组传递给函数的代码。但是这个函数的原型让我很感兴趣。
程序创建这个“选项卡”变量:
#define N 8
float tab[N][N];
tab[0][0] = 2; tab[0][1] = 3; tab[0][2] = -1;
tab[1][0] = 3; tab[1][1] = 1; tab[1][2] = -4;
tab[2][0] = 1; tab[2][1] = 2; tab[2][2] = 3;
hello(tab);
我们有这个功能:
function hello(float mat[][N]) {
我不明白为什么 hello 函数使用空 [] 然后使用 [N] 获取 tab 变量。它有什么变化?我不明白...为什么不 tab[][] ?
代码似乎是由优秀的开发人员编写的,所以我不认为 N 变量是无缘无故的。
如果你能解释一下,谢谢你的时间!
【问题讨论】:
-
大约一半的答案在这里:stackoverflow.com/questions/1461432/what-is-array-decaying。从中可以推断出后半部分:当数组衰减时,第一个维度的大小会丢失。
-
我应该改写我的评论。大小不一定丢失。它可能会被丢弃。
float mat[][N]选择丢弃并成为一个指向未知长度数组的指针N -
@user4581301 感谢您的回答。您提供给我的 stackoverflow 答案对于我来说有点高水平。我虽然数组的第一维包含第二维每个冒号的起始点的地址。如果我松开我的第一个维度的大小,那么我怎么能安全地到达我的第二个维度而不离开数组和段错误!?
-
@user4581301 好的,但这不会改变如果我无法安全访问我的第一个维度,我也无法访问第二个维度?
-
假设你是编译器,看到
void hello(float mat[][]) { use(mat[1][1]); }如果你不知道数组有多少列,你如何计算mat[1][1]的内存位置?
标签: c++ c function multidimensional-array