关于数组自定义函数的关键点


这几天呢,写了点带有数组的自定义函数。

发现有几个需要注意的地方。即参数问题。

先解释一下,参数易班分两类:形参,实参。

实参(argument):   全称为"实际参数"是在调用时传递给函数的参数. 实参可以是常量、变量、表达式、函数等, 无论实参是何种类型的量,在进行函数调用时,它们都必须具有确定的值, 以便把这些值传送给形参。 因此应预先用赋值,输入等办法使实参获得确定值。       形参(parameter): 全称为"形式参数" 由于它不是实际存在变量,所以又称虚拟变量。是在定义函数名和函数体的时候使用的参数,目的是用来接收调用该函数时传入的参数.在调用函数时,实参将赋值给形参。因而,必须注意实参的个数,类型应与形参一一对应,并且实参必须要有确定的值。    

形式参数:形参是函数被调用时用于接收实参值的变量。

根据实际需要可有可无。没有形参时,圆括号也不可省;多个参数之间应用逗号分隔。参数包括参数名和参数类型。

(转载自:https://blog.csdn.net/qq_33187168/article/details/50346465)(里面有详细的分析与解释。懂的就不用去看了。)

现在进去正题:注意事项。数组参数的引入,即在对函数调用是讲数组引入时的格式问题。

这里、以自己编写的一个在一个固定长度的数组中寻找最大值的简单函数为例解释。

先看函数体:

int max(int q[], int x) { int a; int max = q[0]; for (a = 1; a < x; a++) { if (q[a] > max) max = q[a]; } return max; } 可以看到,我在编辑形参时没有写入数组的长度 可以这样想:我们要引入数组,与此同时数组的名字是未知的,数组的长度也是未知的。即这里的数组形参会涉及两个变量 1:数组的名字,这里是int型所有写了:int q[] 2:数组的长度因为长度是整形,所以用int x 现在看函数调用的例句: s = max(q, 3); 可以看到这里调用时引入了两个变量:q(程序前面定义的数组名),3(数组长度) 即会把前面的q当做max函数中的数组名,3当做x即数组长度进行运算。 这里要注意的就是引入是要按函数头上自己定义是的顺序一一对应。 否则会无法编译。 现在看完整代码。 说到完整代码又要多说点东西了。 函数体的位置安放 先看第一种: #include int max(int q[], int x) { int a; int max = q[0]; for (a = 1; a < x; a++) { if (q[a] > max) max = q[a]; } return max; } int main() { int q[3]; int s; for (s = 0; s < 3; s++) { scanf("%d", &q[s]); } s = max(q, 3); printf("%d\n", s); return 0; } 函数体在int main()上面。 即你在使用该函数之前就要先进行定义 即先定义,后使用。 否则会报错,当然有的编译器在你放后面时不会报错,会给你一个warning,但也会影响代码的可读性。 不过该有一种方法可以不用吧函数体放在最前面: 先进性声明:即先告诉电脑我在后面定义了一个程序,一面计算机误解导致编译出错。 #include int max(int q[], int x);//函数声明 int main() { int q[3]; int s; for (s = 0; s < 3; s++) { scanf("%d", &q[s]); } s = max(q, 3); printf("%d\n", s); return 0; } int max(int q[], int x) { int a; int max = q[0]; for (a = 1; a < x; a++) { if (q[a] > max) max = q[a]; } return max; } 可见:在前面先进性声明为另一种格式。  此为编译及试运行结果 OK由于本人才疏学浅,这次就写到这里, 后期会继续学习,持续更新。 谢谢