为了账号安全,请及时绑定邮箱和手机立即绑定
首页 手记 【九月打卡】第16天【养成记】嵌入式挑战第16天,C语...

【九月打卡】第16天【养成记】嵌入式挑战第16天,C语言中的函数:函数传参地址的地址传递

2022.09.21 23:48 59浏览

课程章节:

课程名称:物联网/嵌入式工程师
章节名称:第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;
}

执行结果:
100-fun-change

课后任务

练习

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;
}

执行结果:
101-practice

学习笔记:

课后任务

练习

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;
}

执行结果:
101-practice

课程评价:

这节课没学懂,需要反复观看和理解,某些时刻下需要传递地址给到对应函数。

点击查看更多内容
0人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
全栈工程师
手记
粉丝
11
获赞与收藏
0

关注TA,一起探索更多经验知识

同主题相似文章浏览排行榜

风间影月说签约讲师

50篇手记,涉及Java、MySQL、Redis、Spring等方向

进入讨论

Tony Bai 说签约讲师

146篇手记,涉及Go、C、Java、Python等方向

进入讨论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消