函数

这些基础知识中函数的运用和变化你掌握了吗?

1函数的嵌套调用

C语言不能嵌套定义函数,但可以嵌套调用函数,即允许在调用一个函数的过程中,又调用另一个函数。例如:

这些基础知识中函数的运用和变化你掌握了吗?

例如下面的汉偌塔问题:

这些基础知识中函数的运用和变化你掌握了吗?

这些基础知识中函数的运用和变化你掌握了吗?

2数组作为函数参数

数组元素作函数参数

数组名作函数参数

多维数组名作函数参数

(1)数组元素作函数实参

例1:输入一行字符,分别统计出其中大写字母和 小写字母的个数。

#include “stdio.h”

main()

{char a[30];

int i, k=0, p=0;

gets(a);

for(i=0; a[i]!=‘\0’; i++)

{ if(fun(a[i])==1) k++;

if(fun(a[i])==2) p++; }

printf(“大写字母个数:%d”, k);

printf(“小写字母个数:%d”, p);

}

int fun(char x )

{ if(x>=’A’&&x<=‘Z’)

return 1;

if(x>=’a’&&x<=‘z’)

return 2; }

(2)数组名作函数实参

  1. 用数组名作函数参数,应该在主调函数和被调函数分

别定义数组。

  1. 实参——数组名 形参——数组名或指针变量

  2. 实参数组与形参数组类型应一致。

  3. 系统将实参数组的首地址传给形参数组

  4. 用数组名作函数参数时,形参数组的改变也可以使实

参数组随之改变。

例2:有一个一维数组score,内放10个学生成绩,求平均成绩。

float fun(float a[10]);

main()

{ float s[10],ave;

int i;

for(i=0;i<10;i++)

scanf(“%f ”,&s[i]);

ave=fun(s);

printf(“ave=%.2f ”,ave);

}

float fun(float a[10] )

{ int i;

float sum=0,aver;

for(i=0;i<10;i++)

sum=sum+a[i];

aver=sum/10;

return aver;

}

这些基础知识中函数的运用和变化你掌握了吗?

例3:编写函数,用选择排序对数组中的10个数按由小到大排序。

void fun(int b[ ])

{ int i, j, k, t;

for(i=0; i<9;i++)

{ k=i;

for(j=i+1; j<10;j++)

if(a[k]>a[j]) k=j;

if(k!=i)

{ t=a[i];

a[i]=a[k];

a[k]=t;}

}

}

main()

{ int a[10], i;

for(i=0; i<10; i++)

scanf(“%d”,&a[i]);

fun(a);

for(i=0;i<10;i++)

printf(“%d ”,a[i]);

}

(3)用多维数组名做函数参数

int fun1(int b[ ][4])

{……}

int fun2(int c[3][4])

{……}

main()

{ int a[3][4];

fun(a);

fun(a);

……

}

这些基础知识中函数的运用和变化你掌握了吗?

3局部变量和全局变量

变量按其作用域分类可分为局部变量和全局变量。

局部变量:在一个函数内部定义的变量。

有效范围:只在本函数范围内有效。

全局变量:在函数外部定义的变量(又叫外部变量)。

有效范围: 从定义变量的位置开始到本源文件结束,可以为本文件其他函数所共用。

这些基础知识中函数的运用和变化你掌握了吗?

  1. 函数内部定义的变量(局部变量) , 只在该函数范围内有效。(main主函数也不例外) 一个函数不能使用其他函数中定义的变量.

  2. 不同函数中可以使用相同名字的变量,它们代表不同的对象,互不干扰。

  3. 形式参数也是局部变量。

  4. 可以在复合语句中定义变量, 这些变量只在复合语句中有效。

这些基础知识中函数的运用和变化你掌握了吗?

这些基础知识中函数的运用和变化你掌握了吗?

这些基础知识中函数的运用和变化你掌握了吗?

这些基础知识中函数的运用和变化你掌握了吗?

4用static声明局部变量

有时希望函数中的局部变量的值,在调用结束后不消失,而保留原值。即其占用的存储单元不释放,下次调用该函数时,该变量已有值(上一次调用结束时的值)。这时应定义该局部变量为“局部静态变量”,用static加以声明。

这些基础知识中函数的运用和变化你掌握了吗?

加C/C++学习交.流群获取C语言、C++、Windows高级编程,MFC框架编程、QT框架编程,Linux应用程序开发,Linux内核研究等系统学习路线,更有进阶干货的直播免费学习权限
,都是大牛带飞 让你少走很多的弯路的 群…号是 787190917

对局部静态变量的4点说明:

1、局部静态变量属于静态存储类别,在静态存储区内分配存储单元。在程序整个运行期间都不释放。而自动变量(局部动态变量)属于动态存储类别,占动态存储区空间,函数调用结束就释放。

2、对局部静态变量,只在编译时赋初值一次,以后每次调用函数时不再重新赋初值,而只是保留上次函数调用结束时的值。而对自动变量赋初值,不是在编译时进行的, 而是在函数调用时进行。每调用一次函数,重新给自动变量赋一次初值。

3、若定义局部变量不赋初值的话,对静态变量来说,编译时自动赋初值0(数值型)或空字符(字符型)。而对自动变量来说,它的值是一个不确定的值。因为每次函数调用结束后存储单元已释放,下次调用又重新分配单元,而所分配的单元中的值是不确定的。

4、虽然局部静态变量在函数调用结束后仍然存在,但其它函数不能引用它。

以下2种情况需要用局部静态变量:

(1)需要保留函数上一次调用结束时的值。

这些基础知识中函数的运用和变化你掌握了吗?

(2)如果初始化后,变量只被引用而不改变其值,这时用局部静态变量比较方便,以免每次调用时重新赋值。

用静态存储要多占内存,降低了程序的可读性,调用次数多时往往弄不清局部静态变量的当前值是什么。因此,要少用局部静态变量。

—END—

相关文章: