day12.1
谁能横刀立马,唯我飞牛大将军!
涵盖知识点:
库函数与自定义函数
函数参数
函数调用
下面是day12所学到的知识:
函数
1.函数是什么?
函数是子程序。
2.C语言中函数的分类
1.库函数
2.自定义函数
3.库函数
不是业务性的代码,而是为了在开发的过程中,支持可移植性和提高程序的效率,所以C语言的基础库中提供了一系列类似的库函数,方便程序员进行软件开发。
www.cplusplus.com
4.自定义函数
写一个交换数字的程序
#include<stdio.h>
#include<windows.h>
int swap(int x, int y)
{
printf("swap:交换之前:%d %d\n", x, y);
int temp = 0;
temp = x;
x = y;
y = temp;
printf("swap:交换之前:%d %d\n", x, y);
}
int main()
{
int a = 20;
int b = 30;
printf("main:交换之前:%d %d\n", a, b);
swap(a , b);
printf("main:交换之后:%d %d\n", a, b);
system("pause");
return 0;
}
结果:此时没发生交换,只在swap函数内部进行了交换,但是空间随即被释放,没有swap函数外部产生了影响。
原因,这里发生了实参传给形参时,即形参实例化后其实相当于实参的一份临时拷贝。
用指针后
#include<stdio.h>
#include<windows.h>
int swap(int *x, int *y)
{
printf("swap:交换之前:%d %d\n", *x, *y);//形参
int temp = 0;
temp = *x;
*x = *y;
*y = temp;
printf("swap:交换之前:%d %d\n", *x, *y);
}
int main()
{
int a = 20;
int b = 30;
printf("main:交换之前:%d %d\n", a, b);
swap(&a, &b);//实参
printf("main:交换之后:%d %d\n", a, b);
system("pause");
return 0;
}
5.函数参数
全局变量不存在传参问题
C函数可以不写返回值,但默认是int类型
无参数可传: int GetMax (void)
无返回值 : void GetMax ( int )
实际参数(实参):真实传给函数的参数,叫实参。实参可以是:常量、变量、表达式、函数等。无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传给形参。
形式参数(形参):形式参数是指函数名后括号中的变量,因为形式参数只有在函数被调用的过程中才实例化(分配内存单元),所以叫形式参数。形式参数当函数调用完成之后就自动销毁了。因此形式参数只在函数中有效。
形参实例化后其实相当于实参的一份临时拷贝。
6.函数的调用
传值调用:函数的实参和形参分别占有不同的内存块,对形参的修改不会影响实参。
传址调用:
<1>传址调用是把函数外部创建变量的内存地址传递给函数参数的一种调用函数的方式。
<2>这种传参方式可以让函数和函数外边的变量建立起真正的联系,也就是函数内部可以直接操作函数外部的变量