学习笔记之——C语言 函数( 三 )


2) 每次递归调用之后越来越接近这个限制条件
9、 当自定义的函数名与库函数重名的时候:
根据https://zhidao.baidu.com/question/369199943840037324.html中说明:当自定义函数与库函数同名时,一般的调用是自定义函数优先,但是标准库函数并不失去意义 。只是调用方式要有所改变:用双冒号::开头是调用库函数,直接写函数名是调用自定义的函数 。
举例说明:
#include<stdio.h>
void printf()
{
puts(“12345”);
}
int main()
{
::printf(“abc\n”);
printf();
return 0;
}
运行结果如下:
abc
12345
10、
以下摘抄自谭浩强主编的《C语言程序设计》(第3版),算是我对照课本的学习笔记吧:
1、 函数是什么:
每一种计算机语言里都有子程序、函数之类,用于表达一小部分具体的功能,可以被其他部位的 函数调用使用 。函数这个概念来源于英文的function,译成中文可以是函数、概念、功能等 。函数的存在使大规模的问题处理可以分解为一个个小的问题来解决,把整个问题分成模块化组装来解决 。这是函数存在的主要意义 。另外利用调用函数的方法可以减少代码的数量,在主程序里不同部位出现的重复的功能组成单独的、可以调用的模块,在使用时不必重复敲入,同时还让代码直观 。
C语言使用函数化编程,main函数成为主函数,程序在编译过程中,从前往后编译,实际运行的时候通过运行程序的命令直接调用main主程序,在主程序里通过直接或者间接的调用其他子函数 。
2、  函数在未调用时候,不占用内存,不分配位置,在实参传递给形参后,程序分配内存 。在调用结束后(子函数运行完毕),释放形参单元 。所以函数是相互独立的,定义需要分别定义,不能嵌套定义 。这个应该属于局部变量的范畴了,后面学习局部变量应该容易理解 。
3、  由于编译过程是从上到下 。那么函数的编写在被引用点前的话,在引用的函数里不需要声明出来 。在引用点后面编写的函数,在引用的函数里要声明 。
函数的声明方法:形式与函数名一致,后面要求加分号 。
4、  当没有返回值的时候(return为0),函数要指定为viod类型 。有返回值的时候,函数类型为返回值类型 。这样的定义,有助于在调用层函数里把这个函数可以作为一个变量使用 。一个函数只能带回一个返回值 。
5、  定义函数: 类型名   函数名(形参列表){   }
6、  声明函数:类型名   函数名(形参列表){   };
7、  在函数的最后位置对函数返回值进行限制 。
限制语句为 return (返回变量名),或者简写为return 变量名;
8、  函数在被调用的时候,可以当作一个本函数里的变量看待,调用方法和使用一个变量一样 。谭浩强教程中给出3种调用方式:单独一个语句printf_star;   函数表达式c=max(x,y);    作为函数的参数printf(“%d”,max(a,b);
9、  函数在被调用的时候,实参的列表顺序和数据类型和形参一致 。
这一条里面有两个问题没有搞懂:
1) 声明函数的时候,形参可以不写参数名 。比如void print(int,float,char);是合法的,那么在函数里怎么判断该调用那个参数了呢?(解决:在需要调用函数的程序里,声明函数只是给函数预留出足够用的内存,所以可以不用写参数名,但是在编程过程中,形参位置一定要写参数名 。)
2) 存在调用函数可以少写参数的情况 。比如主函数main在规定里是带有两个参数的,平时可以不写 。根据要求必须一一对应,那么如何处理调用过程中参数缺省情况呢?

经验总结扩展阅读