内容正文:
C 语言程序设计
2023
翻转课堂实用教程
9.2 指针与函数
1
2
3
指针变量作为函数参数
数组名作为函数参数
知识点
指针与函数案例分析
案例分析
指针与函数
相关练习题
练习题
讲解本节的主要内容,方便学生的学习。
指针变量作为函数的参数时:
将函数外部某些变量的地址传递到函数内部,在函数内部通过这些外部变量的地址操作这些外部变量。
1.指针变量作为函数的参数
9.2.1 指针与函数知识点
案例9.2.1 编写calculate函数来计算两个double类型变量a和b的和与差,并将和sum与差diff返回给main函数。
9.2.1 指针与函数知识点
对于需要函数返回多个值的情况:
可以将这两个变量sum和diff定义为全局变量(案例8.2.1);
还可以将这两个变量作为函数的入参。
参数该如何传递?
9.2.1 指针与函数知识点
#include<stdio.h>
void calculate( int sum,int diff,int a,int b){
sum = a +b;
diff = (a>b?a-b:b-a);
printf("In calculate,sum is %d,diff is %d
",sum,diff);
}
int main(){
int a,b,sum = 0,diff = 0;
printf("请输入整型a和b的值:");
scanf("%d %d",&a,&b);
calculate(sum,diff,a,b);
printf("In main,sum is %d,diff is %d",sum,diff);
return 0;
}
请输入整型a和b的值:23 10↙
In calculate,sum is 33,diff is 13
In main,sum is 0,diff is 0
案例9.2.1程序代码(错误实例)
calculate()函数中计算出来sum和diff的值,这个结果并没有返回给calculate()函数的调用者main()。
分析原因(1)calculate与main中的sum和diff,不同变量,作用域不同、所占内存空间不同。
(2)sum、diff、a、b的值单向依次传给了calculate()的形式参数。
以值传递,传递的是数值。
9.2.1 指针与函数知识点
#include<stdio.h>
void calculate( int *pSum,int *pDiff,int a,int b){
*pSum = a +b;
*pDiff = (a>b?a-b:b-a);
}
int main(){
int a,b,sum = 0,diff = 0;
printf("请输入整型a和b的值:");
scanf("%d %d",&a,&b);
calculate(&sum,&diff,a,b);
printf("sum is %d,diff is %d",sum,diff);
return 0;
}
请输入整型a和b的值:23 10↙
sum is 33,diff is 13
案例9.2.1程序代码(正确实例)
main()函数将sum和diff的地址值传给形参calculate中的pSum、pDiff;
calculate中*pSum和*pDiff就是sum和diff。
以值传递,传递的是地址信息。
main()函数将sum和diff的地址值传给形参pSum、pDiff,这样在calculate中*pSum和*pDiff就是sum和diff变量,对*pSum和*pDiff的赋值就是对main()函数中sum和diff的赋值。即使calculate()函数执行结束pSum和pDiff被销毁后,对sum和diff的修改“已成定局”,所以在main()函数中打印sum和diff的值就是a、b的和与差。
总结,通过函数调用改变某个变量的值,需要满足三个条件:
①首先在主调函数中,传入函数的实际参数需要是该变量地址;
②其次函数的形参需要是与该变量同类型的指针;
③最后在函数内部,改变形参所指向的变量的值。
用指针变量作为函数参数的方式,也可以实现函数返回多个变量的情况
1.指针变量作为函数的参数
9.2.1 指针与函数知识点
数组名实际上就是一个指针常量,主调函数将数组名传递给被调函数时,仅仅是数组的首地址,在被调函数中无法获得数组元素的个数,还需要一个整型参数来表示数组的元素个数。
2.数组名作为函数的参数
9.2.1 指针与函数知识点
要求:输入两个整数a,b,编写swap函数,通过调用swap函数实现a和b的交换。
问