变长数组参数一问
#include <stdio.h>
void foo(int size_x, int size_y, int tab[size_x][size_y])
{
printf("tab: %d\n", tab[1][1]);
}
int main()
{
int tab[9] = {0, 1, 2, 3, 4, 5, 6, 7, 8};
foo(0, 0, tab);
foo(1, 1, tab);
foo(2, 2, tab);
foo(3, 3, tab);
return 0;
}
/*
程序可能输出如下:
tab: 1
tab: 2
tab: 3
tab: 4
1、请解释结果是否正确,为什么;
2、foo(3, 3, tab); 函数调用中,是否非法引用了数组以外的元素;
3、四次函数调用:
foo(0, 0, tab);
foo(1, 1, tab);
foo(2, 2, tab);
foo(3, 3, tab);
在函数体 foo() 中,每一次,指针 tab 引用的分别是位于 int tab[9]; 数组中的第几个元素。
4、续上一题目[3]。四次函数调用,在函数体 foo() 中,每一次,tab[0][0] 引用的分别是位于 int tab[9]; 数组中的第几个元素。
*/