函数调用中参数传递的问题

关注

单片机 STM32 花生大事    2018-01-17   |   浏览量 173  

编辑了一个函数changdata(u16 data1,u16 data2)

其中的实际使用的data1和data2,参与了函数运算,并且data1和data2值在运行完changdata后data1和data2后会改变数值,最终应用到的是data1和data2改变后的值,这种函数如何编辑使用。目前这种编辑方式是调用此参数不能正常使用,但是将changedata里面的程序直接复制粘贴将data1和data2用实际参数替代后就能正常运行。

最佳答案

  • skawu 发表于2018-01-17

    函数传参,传址和传值是不一样的,你如果要改变参数的内容,要用传址,即传递data1和data2的地址到函数,changdata(u16* data1, u16* data2)

    举报 评论 0

其他答案

  • aaaxxxrrr 发表于 2018-01-17

    C语言中讲过,形参和实参的作用时间是不一样的,data1和data2只在changdata​内部作用,一般大家好像这样用

    u16 changdata(u16 *data1,u16 *data2)

    {

    ........

    return 你需要的值;

    }

    void main()

    {

      u16 *a=10;*b=15;

      changdata(&a,&b)​;

    }

    举报 评论 0

  • 靳飞 发表于 2018-01-17 云汉达人

    方法一,将函数的参数使用指针方式,传递数据的地址,而不是数据本身,这样,地址是不变的,只是地址上的数据更改了,再使用时,直接从地址上取数据。

    方法二,增加返回值,但是返回值也要是指针,在C中,返回值只能是一个,你可以把两个数据放在两个相邻的地址上,或是一个数组里。

    举报 评论 0

  • 我是爆米花啊 发表于 2018-01-17

    你是想改变这两个参数的值,并且直接使用这两个结果是吧?

    你需要把两个参数的地址作为形参传递进去,直接修改这两个地址上的数据,然后使用。

    changdata(u16* data1, u16* data2)

         * data1 = xxxx;

         * data2 = xxxx;

     }​

    调用的时候这样写 changdata(&a,&b);这样直接传递地址的形式。

    举报 评论 0

  • donatello 发表于 2018-01-17

    传值调用不能修改参数的值,只有传址调用才可以:
    函数声明:changdata(u16 *data1,u16 *data2)...


    函数调用:
    int a,b;
    changdata(&a,&b);

    举报 评论 0

  • xdsnet 发表于 2018-01-17

    c语言设计时是函数只能有一个返回值(而且只能是数值——整形——包括char、浮点型、指针值),为了实现多个值的返回(特殊类型的返回),就只能通过指针值来实现。注意返回值数量最多一个,这个和多个return需要区别,每次执行到return就返回了,所以后面没有执行到的return是没有返回值的,所以还是只有1个返回值。

    主要有2种情况

    1.如果是单个值(针对特殊类型),则可以直接返回一个指针,从而获取到值

    2.如果是多个值需要返回,则只能通过传入一个(多个)地址指针,让函数内部修改这些地址的值来实现

    举报 评论 0

我来回答

试用推荐

正点原子Minifly开源四轴飞行器

产品总数:4个  申请人数:394

距离结束时间:

推荐达人 更多>

  • 王奕 向ta提问

    Eagleson

    在学习FPGA的道路上 我们一起成长吧!

    在行: FPGA/CPLD

  • 靳飞 向ta提问

    汉云

    在路上的Linuxer

    在行: DSP技术 Linux 系统 STM32讨论区 PIC单片机 PCB技术/设计/定制

  • Angel Cherry 向ta提问

    MOP

    用愛和熱忱寫好每一行Code

    在行: FPGA/CPLD Linux 系统 热门单片机

  • 陈龙 向ta提问

    活到老学到老、生命在于折腾

    在行: 电路设计 Linux 系统 DIY创客 开发板

  • 徐珂靖 向ta提问

    xukejing

    Linux系统 、热门开发板

    在行: Linux 系统

完成答题
赶快去开启您的宝箱吧