一.函数:
(此概念我们前面文章已经学习过了,此处直接上例子)
1.写一个函数,可以找出两个整数中的最大值
//写一个函数,可以找出两个整数中的最大值
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int get_max(int a, int b)//后面千万不要加分号
//前面的类型根据返回值类型决定
{//函数的定义
return (a > b ? a : b);
//运算符用法前面文章中提到过
}//函数体
void text()
{
printf("加油!");
}
//不需要任何返回就是void类型
int main()
{
int x = 0;
int y = 0;
printf("请输入两个想比较大小的整数:");
scanf("%d %d", &x, &y);
int i = get_max(x, y);//函数的调用
printf("比较大的数字是:%d", i);
return 0;
}
.
.
.
二.形参和实参
1.实际参数(实参):
- 概念:真实传给函数的参数
- 内容:实参可以是:常量,变量,表达式,函数等
- 注意:无论是何种类型的量,在进行函数调用时,他们都必须有确定的值,以便把这些值传给形参。
2.形式参数(形参):
- 概念:是指函数名后括号中的变量,因为形式参数只有在函数被调用的过程中才实例化(分配内存单元),所以叫形式参数
- 注意:形式参数当函数调用完成之后就自动销毁了,因此形式参数只在函数中有效
.
.
.
三.深入理解形参和实参:
题目:写一个函数,可以交换两个整型变量的内容
1.错误方法:
- 当实参传递给形参的时候,形参是实参的一份临时拷贝,对形参的修改不会影响实参
//写一个函数,可以交换两个整型变量的内容
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
void Swap(int x, int y)
{
int i = x;
x = y;//x,y为形参(形式参数)
y = i;
}
int main()
{
int a = 0;//这里a,b是实参
int b = 0;
scanf("%d %d", &a, &b);
printf("交换前:a=%d,b=%d\n", a, b);
Swap(a, b);
printf("交换后:a=%d,b=%d\n", a, b);
return 0;
}//这里会发现没有达到交换的效果,因为只交换了变量x,y的值
//不影响a,b的值
//这里的问题在于:
//实参a和b传给形参x,y时,形参将会是实参的一份临时拷贝
//确实把数据拷贝了一份,但是有自己独立的空间
//因为有独立的空间,所以修改形参不会影响实参
.
2.正确方法:
- 若要改变实参的值,就要传地址
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
void Swap(int* px,int* py )
{
int i = *px;//px中存的是地址,*px中存的是值
*px = *py;
*py = i;
}
int main()
{
int a = 0;
int b = 0;
scanf("%d %d", &a, &b);
printf("交换前:a=%d,b=%d\n", a, b);
Swap(&a, &b);
printf("交换后:a=%d,b=%d\n", a, b);
return 0;
}//若要改变实参的值,就要传地址