引例——在高中数学里,我们有y=f(x);f(x)=3x;
在C语言里我们有:
#include<stdio.h>
int f(int a)
{
return 3 * a;
}
int main()
{
int y;
int x = 3;
y = f(x);
printf("%d", y);
}
下面说一下函数的 声明、定义、调用
声明:”我先告诉系统有这个东西,可以用“
【详见下面】声明的作用是把函数名、函数参数的个数、函数参数类型等信息通知编译系统,以便在遇到函数调用时,编译系统能正确识别函数并检查调用是否合法
1.引用性声明:(将外部已有的东西的作用域扩展到声明处、新声明东西)
2.定义性声明:(声明的同时进行定义)
定义:“之前声明过的东西具体是什么”
用(引用/调用):“变量要正确写在表达式里,函数用的时候别忘了加“()”,并且在里面填写相应的参数”
=============分割线===============
括号内数字对应书上章节
变量_声明(7.10)、定义(7.10)、引用(3.3.2)
见书中P214 变量的声明和定义
#include <stdio.h>
void main()
{
//extern A; //引用性声明【不需建立存储空间】(简称声明)此处需要有别的文件中定义了A变量故注释掉了
int a;//定义性声明【需建立存储空间】(简称定义)
//变量的引用先略……
}
函数_声明(7.4)、定义(7.2)、调用(7.3)
#include <stdio.h>
//声明【如果定义在调用之前,则不用声明】
void test();//声明(“引用”)要加分号
int add(int);//声明只需要函数参数的类型以便于检查、而调用恰恰相反只需要变量名
void main()
{
int a;
test();//函数调用
a=add(1);
printf("a=%d\nadd(1)=%d",a,add(1));
}
void/*类型名*/ test/*函数名*/(/*可能会有形参表列*/)/*函数运算符*/ //函数的定义
{
void print(char*);//声明【如果定义在调用之前,则不用声明】
//函数内有声明部分,执行语句部分
print("test函数被调用");//函数调用
}
void print(char* a)
{
printf("%s\n\n", a);//形参实参传递过程见另一文章
}
int add(int b)
{
return b + 1;//返回值可以理解成“一个操作的结果”并可以去赋值给别的变量
}
就用add(int)这个函数来说
定义:类型名(与return的数的类型一致)函数名 (形参表列:(形参的类型、形参的名字(在函数里处理用的)))
int add(int b)
{
return b + 1; //返回值与函数参数一致
}
*声明:函数类型、函数名、函数参数类型(函数参数的个数【就是有几个函数参数类型】)
int add(int);
调用:函数名、函数参数来源变量的名称。形参实参“虚实结合”后,得到返回值或处理完一些东西。
a=add(1); //将返回值传给a
声明的作用是把函数名、函数参数的个数、函数参数类型等信息通知编译系统,以便在遇到函数调用时,编译系统能正确识别函数并检查调用是否合法
第180页的这句话让我瞬间明白函数的声明和定义的区别
第181页,函数的声明和函数的定义第一行基本上是相同的,只差一个分号。……函数的首行(函数首部)称为函数原型。
定义的首行,再加一个分号,就成了函数的“声明”