C语言函数知识点概述

13 篇文章 1 订阅
5 篇文章 1 订阅

(一),函数是什么?

  • 在维基百科中对函数的定义:子程序
  • 子程序是一个大型程序中的某部分代码,由一个或多个语句组成。负责完成某项特定的任务,而且相较于其他代码,它具有相对的独立性。
  • 一个C语言程序可以由多个函数构成,但主函数只有一个,且函数作用的实现均在主函数中完成。

(二),C语言中函数的分类

1,库函数

C语言的常用的标准头文件有 :

<ctype.h>   <time.h>   <stdio.h>

<stdlib.h>   <math.h>   <string.h>
这几种标准头文件中都包含许多库函数

2,自定义函数

  • 自定义函数的构造
    函数类型 (同时也是返回值类型) 函数名(自己可以随便编写,命名规则和标识符相同) (参数类型 参数)(可以写多个参数,参数之间用,隔开)
    {
    语句
    }

  • 自定义函数的几种类型:
    (1),int 整数类型
    (2),void 无返回值/也可以指明一个通用型指针
    (3),char 字符类型
    (4),double类型
    (5),float类型
    (6),short短整型
    (7),long长整型
    (8),* p指针类型

  • 自定义函数可以带参数,也可以不带参数

  • 另外函数的表达式也可以作为参数。例如:max(a,max(b,c))

(三),函数的定义,声明,调用与返回

1,函数的定义

结构如下:

数据类型	函数名(形式参数说明)
{
	函数体
}

以下就是函数的定义的具体形式

int power(int x,int y)//函数定义后面不用加分号
{
	int i;
	i = x+y;
	return i;
}

2,函数的声明

函数的声明形式为:

函数类型 函数名(形参类型1 形式参数1,形参类型2 形式参数2…);

  • 注意:函数的声明后要加分号

函数声明的目的是告诉编译系统,函数值是什么类型,有多少个形式参数,每一个参数都是什么类型的,为编译系统进行类型检查提供依据

以下就是函数声明的具体形式

#include<stdio.h>
//double func(float x,float y);函数的声明也可以在主函数之前
int main()
{
	double func(float x,float y);//func函数的声明
	float a,b,c;
	scanf_s("%d,%d",&a,&b);
	c = fun(a,b);//函数的调用也可以说函数的实现
	printf("%f\n",c);
}
double func(float x,float y)//函数func的定义
{
	return(x+y);
}

以下列情况可以省略函数声明

(1),当函数的返回值为整型字符型时,如果在同一个文件中既定义函数,又调用该函数,则不论定义函数与调用函数在源程序中的位置关系如何,都可以省去函数说明。
例如:

#include<stdio.h>
//double func(float x,float y)函数的声明不仅可以在主函数内声明也可以在主函数前声明
int main()
{
	//int func(int x, int y);//将函数声明注释后程序仍可以运行,且结果相同
	int a, b, c;
	scanf_s("%d,%d", &a, &b);
	c = func(a, b);//函数的调用也可以说函数的实现
	printf("%d\n", c);
}
int func(int x, int y)//函数func的定义
{
	return(x + y);
}

(2),如果被调用函数的返回值不是整型或字符型,而是其他类型,如果函数定义和函数调用在同一个文件中,且在源文件中函数定义的位置在调用该函数之前,则可以省去在调用函数中对被调用函数的函数说明
例如:

#include<stdio.h>
int add(int x,int y)//函数的定义
{
	return (x+y);
}
int main()
{
	int a,b,c;
	scanf_s("%d,%d",&a,&b);
	c=add(x,y);//函数的调用也可以说函数的实现
	printf("%d,%d",a,b);
}

以下这几种情况不能省略函数说明

(1),如果在源文件中函数定义的位置在调用该函数之后,则必须在调用该函数前给出被调用函数的函数声明。
(2),如果函数的定义与调用在两个不同的文件中,则不论函数返回值的类型是什么,在调用该函数之前要给出函数声明。

总结:函数声明一定要在函数调用之前,函数声明后要加分号。

  • 在C语言中,函数的定义是平行的,不允许函数的嵌套定义(就是在一个函数内再定义一个新的函数)
  • 而函数的调用关系比较自由,允许在一个函数内部调用其他函数,称为函数的嵌套调用,甚至允许在函数的内部调用函数自身(俗称函数的递归)

3,函数返回值

函数调用之后的结果称为函数的返回值,通过return语句将返回值带回调用函数
格式:
return 表达式;
功能:
将表达式的值返回调用函数

函数定义时的类型就是函数返回值的类型

总结:

  • 函数返回值只能有一个
  • 当函数中不需要返回值时,可以写成:return;

(四),函数之间的数据传递

1,函数参数的传递规则

形参是函数在定义时由用户定义的形式上的变量
实参是函数调用时,调用函数为被调函数的形参提供的原始数据

  • 其实在C语言中,实参向形参传数据的方式是"值传递"
  • 值传递的过程类似于复印就是将实参中的数据“复印”到形参
  • 所以当你改变形参中的数值大小或交换两个形参中的值,都不会影响到实参中的数值
    例如:
#include<stdio.h>
void swap(int x,int y);
int main()
{
	int i,j;
	printf("输入你要交换值的两个数: ");
	scanf_s("%d,%d",&i,&j);
	swap(i,j);
	printf("\n交换后两个数分别为:%d,%d",i,j);
	return 0;
}
void swap(int x,int y)
{
	int c;
	c=x;
	x=y;
	y=c;
}

结果: i和j的值并没有交换

总结:

  • 形参在被调用函数中定义,实参在调用函数中定义
  • 形参是形式上的,定义时编译系统并不为其分配存储空间,也无初值,只有在函数被调用时,才临时分配存储空间接受实参的值,函数调用结束,内存空间释放,值消失
  • 实参可以是变量名或表达式,但必须在函数调用之间有确定的值
  • 实参和形参之间是单向的值传,即实参的值传给形参,因此,实参与形参必须类型相同,数量相等,一一对应。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值