c语言中的函数

c语言中的函数

函数是具有特定功能的程序指令的集合,具备模块化设计,能够实现数据的输入,处理和输出等功能,最终实现代码复用的效果;

1.函数的定义

数据类型  函数名称  (形参列表){
	函数体:函数功能指向语句指令集合。
	return :函数结束语句;
}
数据类型:表示函数返回值类型,可以是构造类型,指针类型,没有返回值用void表示;
函数名称:函数模块访问名称;
形参列表:可以由0个,一个或者多个参数表示,每一个形参有两部分构成,数据类型,形参变量名,没有形参用void表示
void noParm()
{
    printf("没有参数的函数方法");
}
int oneParm(int a)
{
    printf("一个参数的函数方法");
}

2.函数的调用

函数的声明是在函数的定义的时候实现,函数的调用,如果函数有参数,根据参数的数据类型传参。

  1 #include<stdio.h>
  2 void noParm()
  3 {
  4         printf("noParm:%c\n");
  5 
  6 }
  7 int oneParm(int a)
  8 {
  9         printf("oneParm:%d\n",a);
 10 
 11 }
 12 int add(int a,int b)
 13 {
 14         return a+b;
 15 }
 16 int main()
 17 {
 			//调用没有参数的方法
 18         noParm();
 			//调用一个参数的方法
 19         oneParm(3);
 			//调用2个参数的方法,
 20         add(3,4);
 21         printf("add:.%d\n");
 22 }        

2.1在同一文件中调用函数

不需要直接声明,直接在使用函数的文件中对需要使用的函数进行调用;

#include<stdio.h>
int add(int a,int b);//自动对使用的函数进行声明
int main()
{
   //调用函数
  printf("%d\n",add(3,4));
}
	//定义一个两个数相加的函数
    int add (int a,int b)
{
		return a+b;        
}    

2.2在不同一文件中调用函数

优点:只对调用的函数进行声明,其他不做声明;

缺点:调用函数过多是,需要逐一对需要使用的函数进行声明,设计效率较低;

2.2.1直接声明
  //function1.c																																																																																												
  1 #include<stdio.h>
  2 int add(int a,int b)
  3 {
  4         return  a+b;
  5 }
  //在function2.c,调用function1.c的函数
  1 #include<stdio.h>
  3 extern int add(int a, int b);
  4 int main()
  5 {
  6         printf("%d\n",add(3,4));
  7 }
//在一个程序访问多个文件,需要同时编译 gcc function1.c function2.c然后输出./a.out
2.2.2使用头文件

在这里插入图片描述

使用者直接通过头文件来访问函数的方式,比较方便;

1.首先创建 fun.h文件

//首先创建 fun.h文件 vim fun.h
 #ifndef _FUNC_H
 #define _FUNC_H
//引用函数
 extern int add(int a,int b);
 #endifc
//固定三行防止头文件多次展开
  //fun2.c
  1 #include<stdio.h>
  //引用func.h头文件
  2 #include"func.h"
  4 int main()
  5 {
  6         printf("%d\n",add(3,4));
  7 }
  //fun1.c
  1 #include<stdio.h>
  2 int add(int a,int b)
  3 {
  4         return  a+b;
  5 }

3.函数的参数传递

3.1值传参

值函数调用过程中。将实际参数值,复制拷贝给形式参数,形参和实参是独立存在,形参值的修改不会影响实参的值,形参值的修改不会影响实参的值,如果函数有返回值的时候,返回值的实现同样利用值传参实现。

  1 #include<stdio.h>
  2 int setVal(int value)
  3 {
  4 		//21
  5         printf("before : value= %d\n",value);
  6         value =22;
      		//22
  7         printf("after : value= %d\n",value);
  8 
  9 }
 10 int main()
 11 {
 12         int a=21;
 13         setVal(a);
     		//21
 14         printf("%d\n",a);
 15 
 16 
 17 }

3.2地址传参

​ 指的是将实参的地址复制拷贝传递给形式参数,形式参数是指针,指向的空间是实际参数空间,形参解引用访问的就是实际参数空间,可以通过形参修改实参数据;

​ 可以通过形参修改实参数,可以实现形参返回输出数据,从而实现多个数据的输出;

​ 如果需要通过形参改变的数据变量,实参的值,则传递数据变量的地址;

​ 如果需要通过形参改变的指针变量实参的值,则传递指针变量的值;

  //交换两个变量的值
  1 #include<stdio.h>
  2 void changeValue(int a,int b)
  3 {
  4         int temp;
  5         printf("%d:a=%d,b:=%d\n",__LINE__,a,b);
  6         temp=a;
  7         a=b;
  8         b=temp;
  9         printf("%d:a:=%d,b:=%d\n",__LINE__,a,b);
 10 
 11 }
 12 int main()
 13 {
 14         int a=3;
 15         int b=4;
 16         changeValue(a,b);
 17 
 18 }

  //根据地址传参
  1 #include<stdio.h>
  2 void changeValue(int a,int b)
  3 {
  4         int temp;
  5         printf("%d:a=%d,b:=%d\n",__LINE__,a,b);
  6         temp=a;
  7         a=b;
  8         b=temp;
  9         printf("%d:a:=%d,b:=%d\n",__LINE__,a,b);
 10 
 11 }
 12 void changeValue2(int *p,int *q)
 13 {
 14         int temp;
 15         printf("%d:*p=%d,*q:=%d\n",__LINE__,*p,*q);
 16         temp=*p;
 17         *p=*q;
 18         *q=temp;
 19         printf("%d:*p=%d,*q:=%d\n",__LINE__,*p,*q);
 20 }
 21 int main()
 22 {
 23         int a=3;

3.3全局变量传参

​ 指的是利用全局变量属性,实现多个函数之间的参数的传递,所定义的全局变量,可以在程序中的任意函数模块中访问,实现参数传递。

  1 #include<stdio.h>
  2 int val = 123;
  3 void setVal(int myval)
  4 {
  5     val = myval;
  6 }
  7 
  8 void prtVal(void)
  9 {
 10     printf("val = %d\n", val);
 11 }
 12 
 13 int main()
 14 {
 15     prtVal();
 16     setVal(222);
 17     prtVal();
 18     setVal(111);
 19     prtVal();
 20     setVal(333);
 21     prtVal();
 22 }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值