【发布时间】:2017-04-10 07:51:09
【问题描述】:
如果之前有人问过这个问题,我提前道歉——我找不到。
这只是一个奇怪的错误,我不明白它几乎没有(如果有的话)实用性。代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
void print_matrix(int a[4][3], int i, int j)
{
printf("a[%d][%d] = %d\n", i, j, a[i][j]);
return;
}
int main(void)
{
int i, j;
int array[3][5];
for (i = 0; i < 3; i++)
{
for(j = 0; j < 5; j++)
{
scanf("%d",&(array[i][j]));
}
}
printf("array[2][1] = %d\n", array[2][1]);
print_matrix(array, 2, 1);
printf("array[0][4] = %d\n", array[0][4]);
print_matrix(array, 0, 4);
return 0;
}
我声明了一个大小为 [3][5] 的矩阵,但是当我在另一个函数中使用此矩阵并以大小 [4][3] 调用它时,它返回了奇怪的结果。有人可以解释在这种情况下访问内存的方式吗?
【问题讨论】:
-
你的编译器应该警告你。编译时启用所有警告。
-
只需将函数更改为
void print_matrix(int x, int y, int a[x][y])。请注意,C 不允许大小为零的数组。