医院网站优化方案,国外的智慧城市建设网站,湘潭做网站品牌磐石网络,腾讯域名服务商C语言#xff1a;函数 函数的概念库函数自定义函数实参与形参return语句数组做参数声明与定义externstatic 嵌套调用 函数的概念
在C语言中#xff0c;存在一个函数的概念#xff0c;有人也将其翻译为子程序。 在数学中#xff0c;函数是一个完成特定功能的公式#xff0… C语言函数 函数的概念库函数自定义函数实参与形参return语句数组做参数声明与定义externstatic 嵌套调用 函数的概念
在C语言中存在一个函数的概念有人也将其翻译为子程序。 在数学中函数是一个完成特定功能的公式比如传入x的值就能输出满足函数的y值。C语言函数也同理C语言的函数是一个完成某项特定任务的代码段。
而我们常见的函数分为库函数与自定义函数接下来我一一为大家介绍。 库函数
C语言标准中规定了一系列常用的函数标准称为标准库。编译器厂商就会根据这个标准来实现一系列函数供用户使用这些函数就称之为库函数。
要注意库函数不是C语言官方实现的C语言只制定标准具体实现是编译器的厂商来完成的所以不同的编译器下库函数的实现可能不同但是用法是一致的。
库函数是在标准库对应的头文件中声明的所以库函数的使用需要包含对应的头文件。 自定义函数
顾名思义自定义函数就是用户可以自己设计函数。
语法
返回类型 函数名(参数)
{//代码
}返回类型就是函数结束时返回什么样类型的值比如我们调用rand函数其会返回一个整数给我们那么rand函数的返回类型就是int。 参数就是用户使用这个函数需要传入的值。
比如这样一个加法函数
int add(int x, int y)
{int z x y;return z;
}函数名就是add而add左侧的int就是函数的返回类型说明add函数最后会返回一个int类型的数据。 (int x, int y)就是函数的参数这说明使用这个函数需要传入两个int类型的数据。
在需要使用函数时可以这样
add(3, 5);也就是函数名(参数)的形式。
实参与形参
含函数使用的过程中我们把参数分为形参和实参。
实参 在以上的add函数中我们在调用时add(3, 5)中的3和5就是实参它们是传入函数的数据。
形参 在定义函数时add函数名后面的(int x, int y)中的x和y就是形参。 为什么叫做形参呢实际上如果只是定义了add函数而不去调用的话x和y只是形式上存在的它们并不会向内存申请空间不会真实存在所以叫做形参。
而形参是实参的一份临时拷贝对形参的改动不会影响实参。
比如下面的函数
void func(int x)
{x;
}int main()
{int a 0;func(a);printf(%d, a);return 0;
}上述函数中a就是一个实参起初a 0当我们把a传给函数func形参x得到a的值。在函数内部对形参进行了x此时x 1当函数结束时输出a的值。 最后输出的a 0因为x作为形参x对a没有影响。 return语句
当我们的函数需要返回值的时候就需要return语句return后面接着的值就是函数最后返回给外界的值。
return后面可以是数值也可以是表达式。return后面也可以什么都没有直接写return;这种形式适合返回值为void类型。return后面的值类型如果与返回类型不一致编译器则会将其隐式转化。如果函数中有分支语句要保证每种情况都有返回值。 数组做参数
数组也可以做函数的参数比如这样
void func(int arr[])
{
}其中int arr[]就是一个数组类型的参数其可以接收一个数组。 数组传参时直接传入数组名即可
int main()
{int arr[5] {1, 2, 3, 4, 5};func(arr);return 0;
}当一维数组做形参时数组的长度是可以省略的。当二位数组做形参时行可以省略列不可以省略。当数组做参数实参和形参是同一个数组修改形参会对实参造成影响。 声明与定义
C语言的函数声明和定义是定义函数的两个主要部分。
函数定义是指在函数声明的基础上给出函数的具体实现。函数定义包含函数的返回值类型、函数名、函数的参数列表和函数体。函数定义的目的是为了给出函数的具体实现也就是函数体中要执行的代码。
函数定义的语法格式如下
返回类型 函数名(参数)
{// 函数体
}也就是我们先前讲的基本格式我们实现函数的功能就是在函数定义时完成的。
函数声明是指在函数被调用之前在代码的某个地方提前声明函数的存在。函数声明告诉编译器函数的名称、函数参数的类型和返回值类型。函数声明的目的是为了让编译器在编译过程中能够正确地解析函数的调用。
函数声明的语法格式如下
返回值类型 函数名(参数类型1 参数名1, 参数类型2 参数名2, ...)比如
int sum(int a, int b);这就是一个函数的声明可以理解为函数声明就是函数定义去掉了{}内部的内容。 不过函数声明也可以只有类型没有形参名称比如这样
int sum(int, int);函数声明和定义的关系是函数声明是对函数定义的提前声明函数定义是对函数的具体实现。在实际使用中通常将函数的声明放在头文件中将函数的定义放在源文件中。这样做的好处是可以将函数的声明和定义进行分离方便代码的管理和维护。
需要注意的是在C语言中函数的声明和定义可以放在任意顺序只要在函数被调用之前可以访问到函数的声明即可。 extern
在C语言中extern关键字用于声明一个全局变量或者函数但不进行定义。它可以被用于多个源文件中用于告诉编译器该变量或函数是在其他源文件中定义的。
在C语言中变量的声明和定义是不同的。声明告知编译器该变量的类型和名称而定义则为该变量分配存储空间并初始化它。如果在一个源文件中声明一个全局变量那么在其他源文件中访问该全局变量就需要使用extern关键字。
这里是一个例子来说明extern关键字的使用
假设我们有两个源文件main.c和helpers.c。我们希望在main.c中使用helpers.c中定义的全局变量count和函数increment()。
首先我们在helpers.c中定义全局变量
int count 0;void increment() {count;
}然后在main.c中声明这些全局变量和函数并使用extern关键字告诉编译器它们是在其他源文件中定义的
#include stdio.hextern int count; // 声明count变量
extern void increment(); //声明increment函数int main() {increment(); // 调用increment函数printf(count: %d\n, count); // 访问count变量return 0;
}注意在main.c中我们需要包含helpers.c中定义的函数的头文件以便在编译过程中编译器可以知道函数的签名。
编译并运行这些代码输出将会是count: 1。这是因为我们在increment函数中增加了count变量的值并在main函数中访问了它。
总结一下extern关键字是用于在一个源文件中访问另一个源文件中定义的全局变量和函数。它将变量或函数的声明与定义分离使得代码更加模块化和可扩展。 static
在C语言中static是一个关键字用于修饰变量和函数。它的行为和作用会根据修饰的对象不同而有所不同。下面分别介绍static关键字在变量和函数中的作用并给出相关案例。 static修饰变量 在函数内部static修饰的局部变量会被赋予静态的存储持续时间。这意味着变量的生命周期将持续到程序结束而不是在函数执行完后销毁。此外静态局部变量的作用域仍然是局部的只能在定义它的函数内部使用。 例子 #include stdio.hvoid example() {static int count 0;count;printf(Count: %d\n, count);
}int main() {for (int i 0; i 5; i) {example();}return 0;
}输出结果 Count: 1
Count: 2
Count: 3
Count: 4
Count: 5在上面的例子中静态变量count被定义为函数example()的局部变量。每次调用example()函数时count值递增并打印。由于静态变量的存储持续时间为整个程序因此每次调用example()函数时count的值会保留。 在全局范围内static修饰的全局变量具有内部链接即只能在当前源文件中访问其他源文件中不可见。 例子 // File1.c
static int global_var 10;// File2.c
#include stdio.hextern int global_var;int main() {printf(Global Variable: %d\n, global_var);return 0;
}输出结果 Global Variable: 10在上面的例子中我们在File1.c中声明了一个静态全局变量global_var。由于它是静态的所以只能在同一源文件中访问。然后在File2.c中通过extern关键字声明global_var确保在其他源文件中可见从而在main函数中进行访问。 static修饰函数 在函数声明前static修饰的函数具有内部链接。这意味着该函数只能在当前源文件中访问其他源文件中不可见。例子// File1.c
static void static_function() {printf(This is a static function.\n);
}// File2.c
extern void static_function();int main() {static_function();return 0;
}输出结果This is a static function.在上面的例子中我们在File1.c中定义了一个静态函数static_function()“。由于它是静态的所以只能在同一源文件中访问。然后在File2.c中通过extern关键字声明static_function()”确保在其他源文件中可见从而在main函数中进行访问。
总结
在C语言中static关键字的作用取决于其修饰的对象。它可以用于修饰局部变量和全局变量以及函数声明。对于局部变量static赋予了它们静态存储持续时间和保留其值的能力。对于全局变量static给予了它们内部链接特性使其只能在同一源文件中访问。对于函数声明static使其具有内部链接特性使其只能在同一源文件中访问。 嵌套调用
在C语言中函数的嵌套调用指的是在一个函数中调用另一个函数而被调用的函数又可以继续调用其他函数。这种嵌套调用的方式可以实现代码的模块化提高代码的可读性和可维护性。
下面以一个简单的例子来说明函数的嵌套调用
#include stdio.hint func2(int num)
{printf(In func2\n);return num * num;
}int func1(int num)
{printf(In func1\n);int result func2(num);return result 1;
}int main()
{int number 3;int result func1(number);printf(Result: %d\n, result);return 0;
}在上面的例子中有三个函数main、func1和func2。main函数是程序的入口func1和func2是被调用的函数。
main函数中定义了一个整型变量number并将其赋值为3。然后调用func1函数将number作为参数传递给func1。在func1函数中可以看到它调用了func2函数并将num作为参数传递给func2。func2函数执行完毕后返回结果给func1最后func1将其结果加1并返回给main函数。
运行上述代码输出结果如下
In func1
In func2
Result: 10从结果可以看出main函数调用func1函数func1函数又调用了func2函数实现了函数的嵌套调用。通过函数的嵌套调用可以将代码按照功能划分为若干个小模块提高代码的可读性和可维护性。
文章转载自: http://www.morning.kphsp.cn.gov.cn.kphsp.cn http://www.morning.mtbsd.cn.gov.cn.mtbsd.cn http://www.morning.rhqr.cn.gov.cn.rhqr.cn http://www.morning.hmsong.com.gov.cn.hmsong.com http://www.morning.rymd.cn.gov.cn.rymd.cn http://www.morning.cpfbg.cn.gov.cn.cpfbg.cn http://www.morning.mgskc.cn.gov.cn.mgskc.cn http://www.morning.psxxp.cn.gov.cn.psxxp.cn http://www.morning.hrtfz.cn.gov.cn.hrtfz.cn http://www.morning.rtkgc.cn.gov.cn.rtkgc.cn http://www.morning.nyqm.cn.gov.cn.nyqm.cn http://www.morning.mrccd.cn.gov.cn.mrccd.cn http://www.morning.fcwxs.cn.gov.cn.fcwxs.cn http://www.morning.hqqpy.cn.gov.cn.hqqpy.cn http://www.morning.tsgxz.cn.gov.cn.tsgxz.cn http://www.morning.jcyyh.cn.gov.cn.jcyyh.cn http://www.morning.pkmcr.cn.gov.cn.pkmcr.cn http://www.morning.mingjiangds.com.gov.cn.mingjiangds.com http://www.morning.smrkf.cn.gov.cn.smrkf.cn http://www.morning.sbncr.cn.gov.cn.sbncr.cn http://www.morning.xysxj.com.gov.cn.xysxj.com http://www.morning.ksjnl.cn.gov.cn.ksjnl.cn http://www.morning.plqqn.cn.gov.cn.plqqn.cn http://www.morning.sthgm.cn.gov.cn.sthgm.cn http://www.morning.xpmwt.cn.gov.cn.xpmwt.cn http://www.morning.rbknf.cn.gov.cn.rbknf.cn http://www.morning.hyfrd.cn.gov.cn.hyfrd.cn http://www.morning.zfqdt.cn.gov.cn.zfqdt.cn http://www.morning.qkgwz.cn.gov.cn.qkgwz.cn http://www.morning.xfmwk.cn.gov.cn.xfmwk.cn http://www.morning.qdscb.cn.gov.cn.qdscb.cn http://www.morning.nyqnk.cn.gov.cn.nyqnk.cn http://www.morning.rhkmn.cn.gov.cn.rhkmn.cn http://www.morning.bflws.cn.gov.cn.bflws.cn http://www.morning.aiai201.cn.gov.cn.aiai201.cn http://www.morning.bqfpm.cn.gov.cn.bqfpm.cn http://www.morning.pctql.cn.gov.cn.pctql.cn http://www.morning.zdmrf.cn.gov.cn.zdmrf.cn http://www.morning.khlxd.cn.gov.cn.khlxd.cn http://www.morning.gyjld.cn.gov.cn.gyjld.cn http://www.morning.lzsxp.cn.gov.cn.lzsxp.cn http://www.morning.rqpgk.cn.gov.cn.rqpgk.cn http://www.morning.nuejun.com.gov.cn.nuejun.com http://www.morning.qxwrd.cn.gov.cn.qxwrd.cn http://www.morning.pwlxy.cn.gov.cn.pwlxy.cn http://www.morning.pgzgy.cn.gov.cn.pgzgy.cn http://www.morning.nuejun.com.gov.cn.nuejun.com http://www.morning.mbzlg.cn.gov.cn.mbzlg.cn http://www.morning.bqpgq.cn.gov.cn.bqpgq.cn http://www.morning.bgqr.cn.gov.cn.bgqr.cn http://www.morning.wqtzs.cn.gov.cn.wqtzs.cn http://www.morning.yybcx.cn.gov.cn.yybcx.cn http://www.morning.mtrfz.cn.gov.cn.mtrfz.cn http://www.morning.dxsyp.cn.gov.cn.dxsyp.cn http://www.morning.zwzwn.cn.gov.cn.zwzwn.cn http://www.morning.gpmrj.cn.gov.cn.gpmrj.cn http://www.morning.hsjfs.cn.gov.cn.hsjfs.cn http://www.morning.rnhh.cn.gov.cn.rnhh.cn http://www.morning.ykkrg.cn.gov.cn.ykkrg.cn http://www.morning.yfmlj.cn.gov.cn.yfmlj.cn http://www.morning.lzqtn.cn.gov.cn.lzqtn.cn http://www.morning.rhkq.cn.gov.cn.rhkq.cn http://www.morning.nxwk.cn.gov.cn.nxwk.cn http://www.morning.bscsp.cn.gov.cn.bscsp.cn http://www.morning.znrgq.cn.gov.cn.znrgq.cn http://www.morning.srmpc.cn.gov.cn.srmpc.cn http://www.morning.clccg.cn.gov.cn.clccg.cn http://www.morning.mlgsc.com.gov.cn.mlgsc.com http://www.morning.nbgfz.cn.gov.cn.nbgfz.cn http://www.morning.yxwcj.cn.gov.cn.yxwcj.cn http://www.morning.rxlck.cn.gov.cn.rxlck.cn http://www.morning.dtrzw.cn.gov.cn.dtrzw.cn http://www.morning.znlhc.cn.gov.cn.znlhc.cn http://www.morning.dyxzn.cn.gov.cn.dyxzn.cn http://www.morning.bsrcr.cn.gov.cn.bsrcr.cn http://www.morning.gcjhh.cn.gov.cn.gcjhh.cn http://www.morning.wdjcr.cn.gov.cn.wdjcr.cn http://www.morning.dblgm.cn.gov.cn.dblgm.cn http://www.morning.hqllj.cn.gov.cn.hqllj.cn http://www.morning.mrfgy.cn.gov.cn.mrfgy.cn