网站建设设计报告,微网站建设最新报价,wordpress ,typecho做网站函数是一组一起执行一个任务的语句。每个 C 程序都至少有一个函数#xff0c;即主函数 main() 。
主函数可以调用其他函数#xff0c;其他函数也可以相互调用#xff0c;用户也可以那个自定义函数。
函数声明告诉编译器函数的名称、返回类型和参数。函数定义提供了函数的实…函数是一组一起执行一个任务的语句。每个 C 程序都至少有一个函数即主函数 main() 。
主函数可以调用其他函数其他函数也可以相互调用用户也可以那个自定义函数。
函数声明告诉编译器函数的名称、返回类型和参数。函数定义提供了函数的实际主体。
一、自定义函数
1、函数定义与声明
1.1 定义
一个函数应该包括函数头和函数体。定义函数的基本语法如下
return_dataType function_name( parameter list )
{body of the function
}函数说明
return_dataType返回值类型它是函数返回的值的数据类型。可以是C语言中的任意数据类型。也可以不返回值这种情况下return_dataType 是关键字 void。function_name函数名称它函数标识符的命名规则。函数名和参数列表一起构成了函数签名。参数列表参数就像是占位符。当函数被调用时您向参数传递一个值这个值被称为实际参数。参数列表包括函数参数的类型、顺序、数量。参数是可选的也就是说函数可能不包含参数。body函数主体它是函数需要执行的代码语句是函数的主体部分。
注意C语言中函数的定义是相互平行、独立的。即函数体内不能包含其他函数的定义。
示例如下
/* 函数返回两个数中较大的那个数 */
int max(int num1, int num2) {/* 局部变量声明 */int result;if (num1 num2) {result num1;} else {result num2;}return result;
}2、函数声明
函数定义是为了让编译器知道函数的功能而函数声明是为了让编译器预先知道函数名称、参数、返回类型等信息。而函数的实际主体可以单独定义。
函数声明的代码和函数定义时的函数头已基本一致但是末尾要添加分号。一般格式如下 return_dataType function_name( parameter list ); 一般我们定义函数之前要先对函数进行声明。因为编译器对 C代码是顺序编译的而且总是从 main函数开始的。所以
如果自定义函数位于 main函数后面则必须在 main函数前面先声明该函数即调用之前先声明。如果自定义函数位于 main函数前面则不再进行函数声明因此此时函数定义已包含了函数声明的作用。
示例如下
int max(int num1, int num2);2、调用函数
创建 C 函数时会定义函数做什么然后通过调用函数来完成已定义的任务。
当程序调用函数时程序控制权会转移给被调用的函数。被调用的函数执行已定义的任务当函数的返回语句被执行时或到达函数的结束括号时会把程序控制权交还给主程序。
通过函数名调用函数并传递所需参数如果函数返回一个值则可以存储返回值。
实例1调用之前先声明后定义函数
#include stdio.h/* 函数声明 */
int max(int num1, int num2);int main() {/* 局部变量定义 */int a 100;int b 200;int ret;/* 调用函数 */ret max(a, b);printf(Max value is : %d\n, ret);return 0;
}/* 函数定义返回两个数中较大的那个数 */
int max(int num1, int num2) {/* 局部变量声明 */int result;if (num1 num2) {result num1;} else {result num2;}return result;
}实例2调用之前以定义函数
#include stdio.h/* 函数定义 */
void exchange(int a, int b) {int temp;temp a;a b;b temp;printf(exchange: a%d, b%d\n, a, b);
}int main() {/* 局部变量定义 */int a 100;int b 200;/* 调用函数 */printf(1 --- a%d, b%d\n, a, b);exchange(a, b);printf(2 --- a%d, b%d\n, a, b);return 0;
}二、函数传递参数的方式
函数参数的作用是传递数据给函数使用。
函数的参数可以分为两种
形式参数声明和定义函数时参数列表中的参数就是形式参数简称形参。实际参数调用函数时传递给函数的参数就是实际参数简称实参。
当调用函数时有两种向函数传递参数的方式
传值调用把参数的实际值复制给函数的形式参数。在这种情况下修改函数内的形式参数不会影响实际参数。引用调用通过指针传递方式形参为指向实参地址的指针当对形参的指向操作时就相当于对实参本身进行的操作。
默认情况下C 使用传值调用来传递参数。一般来说这意味着函数内的代码不能改变用于调用函数的实际参数。
实例1值传递。函数调用中的实例就是值传递这里就不实例了。
实例2引用传递
#include stdio.h/* 函数声明 */
void my_swap(int *x, int *y);int main() {/* 局部变量定义 */int a 100;int b 200;printf(交换前a 的值 %d\n, a);printf(交换前b 的值 %d\n, b);/* 调用函数来交换值a 表示指向 a 的指针即变量 a 的地址b 表示指向 b 的指针即变量 b 的地址*/my_swap(a, b);printf(交换后a 的值 %d\n, a);printf(交换后b 的值 %d\n, b);return 0;
}/* 函数定义 */
void my_swap(int *x, int *y) {int temp;temp *x; /* 保存地址 x 的值 */*x *y; /* 把 y 赋值给 x */*y temp; /* 把 temp 赋值给 y */return;
}三、局部变量和全局变量
作用域Scope就是变量的有效范围就是变量可以在哪个范围以内使用。
变量的作用域由变量的定义位置决定在不同位置定义的变量它的作用域是不一样的。
1、局部变量
定义在函数内部的变量称为局部变量Local Variable它的作用域仅限于函数内部 出了函数就不能使用了。
函数的形参也是局部变量也只能在函数内部使用。
示例如下
#include stdio.hint sum(int m, int n) {int i, sum 0;//m、n、i、sum 都是局部变量只能在 sum() 内部使用for (i m; i n; i) {sum i;}return sum;
}int main() {int begin 5, end 86;int result sum(begin, end);//begin、end、result 也都是局部变量只能在 main() 内部使用printf(The sum from %d to %d is %d\n, begin, end, result);return 0;
}2、全局变量
在所有函数外部定义的变量称为全局变量Global Variable它的作用域默认是整个程序也就是所有的代码文件源文件包括源文件.c文件和头文件.h文件。
如果给全局变量加上 static 关键字它的作用域就变成了当前文件在其它文件中就无效了。
示例如下
#include stdio.h//定义三个全局变量分别表示三个面的面积
int s1 0, s2 0, s3 0;int vs(int length, int width, int height) {int v; //体积v length * width * height;s1 length * width;s2 width * height;s3 length * height;return v;
}int main() {int v 0;v vs(15, 20, 30);printf(v%d, s1%d, s2%d, s3%d\n, v, s1, s2, s3);v vs(5, 17, 8);printf(v%d, s1%d, s2%d, s3%d\n, v, s1, s2, s3);return 0;
}四、内部函数和外部函数
1、内部函数
如果定义一个函数只能被所在的源文件使用那么这样的函数就称为内部函数又称为静态函数。
定义内部函数时使用关键字 static 进行修饰。先声明时一样修饰。
static return_dataType function_name( parameter list )
{body of the function
}使用内部函数的好处是不同开发者编写函数时不必再担心函数是否会与其他源文件中的函数同名因为内部函数只在所在源文件中有效不同源文件中即使有相同的函数名也没有关系。
2、外部函数
外部函数是可以是被其他源文件调用的函数
定义外部函数时使用关键字 extern 进行修饰。先声明时一样修饰。
extern return_dataType function_name( parameter list )
{body of the function
}常见标准库函数https://cplusplus.com/reference/clibrary/ – 求知若饥虚心若愚。