#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
#include <windows.h>
//函数:1、库函数,2、自定义函数
//C语言任何一个程序都是用函数组成的,
//库函数:1、IO函数,2、字符串操作函数,3、字符操作函数,4、内存操作函数,5、时间\日期函数,6、数学函数,7、其他库函数。。。
//一个完整的函数:1、函数名,2、返回值类型,3、函数参数。
//举例如下
//自定义一个函数,求出2个整数的最大值。
//int 返回值类型为整型,get_max 函数名, (int x, int y)函数参数。
// 形式参数(形参)是指函数名后括号中的变量,因为形式参数只有在函数被调用的过程中才实例化(分配内存单元),所以叫形式参数,
// 形式参数当函数调用完成之后就自动销毁了,因此形式参数只在函数中有效。
// 当函数被调用时,实参传给形参,其实形参是实参的一份临时拷贝
// 改变形参,不能改变实参。下面会再举一个例子说明。
//int get_max(int x, int y)
//{
// int z = 0;
// if (x > y)
// z = x;
// else
// z = y;
// return z;
//}
// int main()
//{
// int a = 10;
// int b = 20;
// //a和b为实际参数 - 实参。真实传给函数的参数,为实参,实参可以为常量、变量、表达式和函数等,
// //无论实参是何种类型的量,在进行函数调用时,他们都必须有一个确定的值,以便把这些值传送给形参。
//
// //函数的调用。
// int max = get_max(a, b);
// printf("最大值 = %d\n", max);//printf为库函数。
// return 0;
//}
//写一个函数,交换a、b的值。
// 当函数被调用时,实参传给形参,其实形参是实参的一份临时拷贝
// 改变形参,不能改变实参。
//void 代表此函数不返回任何值。
void Swap1(int x, int y)//传值调用,此处只是复制了a和b的值,x和y的地址与a和b的地址并不一致。
{
int z = 0;
z = x;
x = y;
y - z;
}
void Swap2(int* pa, int* pb)//传址调用,此处取了a和b的地址,*pa和*pb的地址与a和b的地址是一致的。
{
int c = 0;
c = *pa;
*pa = *pb;
*pb = c;
}
int main()
{
int a = 10;
int b = 20;
printf("交换前 a = %d,b = %d\n", a, b);
Swap1(a, b);//此处实参为a、b的值。
printf("交换后 a = %d,b = %d\n", a, b);//运行后会发现输出为 10 20 ,a、b并未完成交换。
Swap2(&a, &b);//此处实参为a、b地址。*pa和*pb是指针变量,实际为a和b的地址。可以找到实参,所以可以改变实参的数值。
printf("交换后 a = %d,b = %d\n", a, b);//运行后会发现输出为 20 10 ,a、b完成交换。
return 0;
}