求助 二维数组名作实参时,形参的问题
书上说, 当二维数组名作为实参时,对应的形参必须是一个行指针变量。如#include<stdio.h>
#define M 5
#define N 3
main()
{double s[M][N];
......
fun(s);
......
}
则fun函数的首部可以是以下三种形式之一:
(1)fun(double (*a)[N] )
(2) fun (double a[][N] )
(3) fun (double a[M][N] )
列下标不可缺。
无论是哪种形式,系统都将把a处理成一个行指针。
问:
(a) 难道以上三种形式在系统中都是一样的么?? 那这么说M的值就没有任何意义了么??
是不是M的值就可以随便写了,不一定和主函数中的数组s中的M值一样么???
(2)书上还说, 在函数中引用的将是主函数中的数组元素,系统只为形参开辟了一个存放地址的存储单元
,不可能在调用函数时为形参开辟一系列存放数组的存储单元。
问 : (b) 怎么能只开辟了一个存储单元呢?那 函数fun的首部写成这样
fun(double a[M][N] ) 难道系统也是为形参a开辟一个存储单元么,不是开辟一个数组么??行下标M,
列下标N 两个下标 都没有意义了么???那 M 还有什么意义??N 还有什么意义???
(2)就算形参写成数组形式,系统都只为形参开辟一个存储单元么???
是不是不管下标如何,形参都不会有数组越界的可能????
一维数组形式作形参, 二维数组形式作形参 都不会有越界问题吗????