课程章节:
课程名称:物联网/嵌入式工程师
章节名称:第4周之第四讲 1-11 至 1-12 C语言中的函数:函数传参地址的地址传递
讲师姓名:大白老师
课程内容:
C语言中的函数:函数传参地址的地址传递
C语言的函数传参
普通变量地址的传递
- 功能:
我们在使用函数传参的时候,除了传递普通的变量外,在某些时刻不得不传递变量的地址。 传递变量的地址,我们在使用的时候,就只能通过指针来接收了。 - 好处:
传递变量的地址,通过指针接收,可用通过指针修改原变量的值。
代码示例
#include <stdio.h>
/*
//int x = a;
//int y = b;
void change_value(int x,int y)
{
int t = 0;
t = x;
x = y;
y = t;
return ;
}
*/
// 传参的本质:变量之间的赋值操作
// int *x = &a;
// int *y = &b;
// 优点:传递变量的地址,定义指针接收,可以通过指针修改原来变量的值.
void change_value(int *x,int *y)
{
// printf("*x = %d *y = %d\n",*x,*y);
//
// *x = 222;
// *y = 777;
int t;
t = *x;
*x = *y;
*y = t;
return ;
}
// 功能:求a 和 b的和与差,并要求在主函数打印
// 逆向传参:把函数内部获得数据,逆向传递给调用者。
// 需要传递指针才能实现其操作.
//
// int x = a;
// int y = b;
// int *m = &ret1; // m <===>&ret1 *m <===>ret1
// int *n = &ret2;
void do_calc(const int x,const int y,int *m,int *n)
{
int sum1 = 0,sum2 = 0;
sum1 = x + y;
sum2 = x - y;
*m = sum1;
*n = sum2;
return ;
}
int main()
{
int a = 0,b = 0;
int ret1 = 0,ret2 = 0;
int t = 0;
printf("please input two data : ");
scanf("%d%d",&a,&b);
// printf("1.a = %d b = %d\n",a,b);
// change_value(&a,&b);
// printf("2.a = %d b = %d\n",a,b);
do_calc(a,b,&ret1,&ret2);
printf("a + b = %d\n",ret1);
printf("a - b = %d\n",ret2);
return 0;
}
执行结果:
课后任务
练习
1.main()函数定义4个变量,int a,b,max_value,sum.要求用户从键盘输入2个数据赋值给a和b
2.设计一个叫做calc_data()函数,自定义返回值和参数,
要求该函数中求出a和b中的最大值,函数调用结束后,
要求给main函数max_value存储的是两个数中较大的值。
在求两个数的和,要求给main函数sum存储的两个数据的和。
3.在main函数中打印max_value和sum的值。
代码
#include <stdio.h>
void calc_data(const int a,const int b, int *max, int *sum) {
*max = a > b ? a : b;
*sum = a + b;
return;
}
int main() {
int a, b, max_value, sum;
printf("请输入2个数据:\n");
scanf("%d%d", &a, &b);
calc_data(a, b, &max_value, &sum);
printf("a = %d\n", a);
printf("b = %d\n", b);
printf("max_value = %d\n", max_value);
printf("sum = %d\n", sum);
return 0;
}
执行结果:
学习笔记:
课后任务
练习
1.main()函数定义4个变量,int a,b,max_value,sum.要求用户从键盘输入2个数据赋值给a和b
2.设计一个叫做calc_data()函数,自定义返回值和参数,
要求该函数中求出a和b中的最大值,函数调用结束后,
要求给main函数max_value存储的是两个数中较大的值。
在求两个数的和,要求给main函数sum存储的两个数据的和。
3.在main函数中打印max_value和sum的值。
代码
#include <stdio.h>
void calc_data(const int a,const int b, int *max, int *sum) {
*max = a > b ? a : b;
*sum = a + b;
return;
}
int main() {
int a, b, max_value, sum;
printf("请输入2个数据:\n");
scanf("%d%d", &a, &b);
calc_data(a, b, &max_value, &sum);
printf("a = %d\n", a);
printf("b = %d\n", b);
printf("max_value = %d\n", max_value);
printf("sum = %d\n", sum);
return 0;
}
执行结果:
课程评价:
这节课没学懂,需要反复观看和理解,某些时刻下需要传递地址给到对应函数。