------
Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
一.什么是函数
- 任何一个c语言程序都是有一个或者多个程序段(小程序)构成的,每个程序段都有自己的功能,我们一般称这些程序段为“函数”。所以,你可以说c语言是由函数构成的。
二.函数的定义
1.定义函数的目的
- 将一个常用的功能封装起来,方便以后调用
2.定义函数的步骤
- 函数名:函数叫什么名字
- 函数题:函数是干啥的,里面包含了什么代码
3.格式
- 固定格式(很多语言的函数都是这么写的)
返回值类型 函数名(形式参数列表)
{
函数体
}
三.函数调用
四.函数的参数
1.形参和实参的基本概念
2.形参个书和实参一致
3.参数的传递是值传递
4.参数名不能跟函数哪的局部变量同名
#include <stdio.h>
int printLine()
{
printf("-------------\n");
return 0;
}
int average(int num1, int num2)
{
return (num1 + num2)/2;
}
int main()
{
/*
printLine();
printLine();
printLine();
*/
int a = 10;
int b = 9;
int c = average(a, b);
printf("c is %d\n", c);
int a1 = 11;
int b1 = 20;
int d = average(a1, b1);
printf("d is %d\n", d);
return 0;
}
五.函数的返回值
1.返回值的基本概念,return的作用
2.void
3.return
void可以省略return
可以多次使用return
return后面不能有其它语句
4.函数的弱语法
如果没有写返回值类型,默认是int
如果写了返回值,可以不返回
调用一个没有定义过的函数
六.定义函数的步骤
1.明确函数作用,起一个有意义的函数名称
2.明确函数的参数和返回值
七.函数注意
不能嵌套定义函数
死循环调用,自己调用自己
不能重复定义,可以重复声明
#include <stdio.h>
// 形式参数,简称形参
int sum(int num1, int num2)
{
// 函数体内部不能定义和形参一样的变量
// int num1;
num1 = 50;
return num1 + num2;
}
/*
return的作用:
1> 退出函数
2> 返回一个具体值给函数调用者
返回值注意点
1> void代表没有返回值
2> 如果没有明确说明返回值类型,默认是返回int类型
3> 就算明确声明了返回值类型,也可以不返回任何值
默认情况下,C语言不允许两个函数的名称一样
*/
char test()
{
return 'A';
}
/*
void test(int a, int b)
{
}*/
void test5()
{
}
int test3()
{
printf("999999999\n");
}
// 如果不明确声明返回值类型,默认就是int类型
test2()
{
printf("888888888\n");
return 10;
}
int main()
{
int c = test2();
printf("c=%d\n", c);
test3();
//test();
/*
int a = 100;
int b = 27;
// a、b称为函数的实际参数,简称实参
int c = sum(a, b);
printf("a=%d, b=%d, c=%d\n", a, b, c);*/
return 0;
}
八.函数的补充
1.main函数
返回值:0,正常退出;1,异常退出
2.printf函数
#include
返回值:字符串的长i度
十.函数的声明
1.函数的定义顺序
2.函数的声明作用:声明和定义类似于身份证和人的关系
3.只有函数声明、没有定义,编译警告、链接报错
十一. .h和.c文件的分工
1.单文件的坏处
一个文件的内容太多,不利于阅读、调试
多人修改同一个文件出问题
公司里面是团队合作
2.将函数抽取到另一个.c文件中
3.在其他文件中声明函数
4.将抽取到另外一个文件中
5.抽取步骤总结
.c文件写函数的定义
.h文件写函数的声明
十二.#include
1.预处理指令简介
2.#include的作用
纯粹是文件拷贝
3.#include<stdio.h>
stdio.h中有什么?链接的时候做了什么事情:把项目中所有相关联的.o目标文件、c语言函数库合并在一起,生成可执行文件。
<>和""的区别
4.#include的路径问题
代码笔记如下:
ptt.c
#include <stdio.h>
#include "pdd.h"
int main()
{
int score1 = 100;
int score2 = 70;
int c = average(score1, score2);
int d = sum(score1, score2);
printf("平均分是%d\n", c);
printf("总分是%d\n", d);
// \n是一个转义字符
// \t tab键
// \" 一个双引号
// printf函数返回的字符串常量的字符数,并不是字数
// 1个汉字占据3个字符
int e = printf("哈h\"\ta\n");
printf("e=%d\n", e);
return 0;
}
函数的定义.c文件 pdd.c
int average(int a, int b)
{
return (a + b)/2;
}
int sum(int a, int b)
{
return a + b;
}
int minus(int a, int b)
{
return a - b;
}
int multiply(int a, int b)
{
return a * b;
}
函数的声明.h文件 pdd.h
/*
pdd
编写函数的声明
*/
int average(int a, int b);
int sum(int a, int b);
int minus(int a, int b);
int multiply(int a, int b);
编译链接:cc ptt.c pdd.c
生成可执行文件
./a.out 输出结果