一、函数的三要素:定义、声明、调用
- 函数定义就是函数体、函数声明就是函数原型、函数调用就是使用函数。
- 函数定义是函数的根本,函数定义只的函数名表示函数在内存中的首地址,可以用函数名调用执行这个函数(实质是指针解引用访问)。函数中定义的函数体是函数执行的关键,函数执行时主要就是执行函数体,所以函数没有定义就是无稽之谈。
- 函数声明的作用就是告诉编译器函数的原型。
- 函数的调用就是调用执行一个函数,函数调用可以反复使用。
#include <stdio.h>
int add(int a,int b);
int main(void)
{
printf("3+5=%d.\n",add(3,5)); //add函数的返回值作为了printf函数的参数了
}
//函数体(函数的定义)
int add(int a,int b) //函数名、参数列表、返回值
{
return a+b; //函数体
}
二、函数原型和作用
- 函数原型就是函数的声明,说白了就是函数的函数名、返回值、参数列表。
- 函数原型的主要作用是给编译器提供原型,让编译器在编译程序时帮我们做参数的静态类型检查。
- 编译器在编译程序时是以单个源文件为单位的。而且编译器工作时已经经过预处理了,编译器编译文件时是按照文件中语句的先后顺序执行的
- 编译器从源文件的第一行开始编译,遇到函数声明时就会收到函数声明表中,然后继续向后找。当遇到一个函数调用时,就在本文件的函数声明中去查这个函数,看有没有原型相对应的函数,这个原型相对应的函数有且只有一个。
- 函数可以重复声明,但不能重复定义。
三、函数传参
- 传参的类型个数要匹配。
- 传参的个数较多的时候,打包成结构体传入。
- const修饰传参。