找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1348|回复: 12
收起左侧

关于C语言函数参数传递的问题

[复制链接]
ID:705806 发表于 2022-2-2 00:13 | 显示全部楼层 |阅读模式
在接触到了ucos之后第一次知道了可以通过函数的参数来获得数据,那入口参数和返回值有什么区别呢?求各位大佬指教在这个两个函数uint8_t ReadData(uint8_t byte)
{
byte = byta + 10;
return byte;
}

void ReadData(uint8_t byte,uint8_t* data);
{
*data = byte + 10;
}


回复

使用道具 举报

ID:827243 发表于 2022-2-2 08:12 | 显示全部楼层
如果只有一个返回值,这两个函数效果基本一样,只是调用方法不同

a=ReadData(bb)  和 ReadData(bb, &a)

但如果需要返回多个值,那只能用第二个办法了。
回复

使用道具 举报

ID:161164 发表于 2022-2-2 10:26 来自手机 | 显示全部楼层
如果只有一个数就没有分别,如果超过一个数就只能用参数
回复

使用道具 举报

ID:883242 发表于 2022-2-2 12:27 | 显示全部楼层
形参实参的概念回去看教科书,这里一两句说不清楚。
回复

使用道具 举报

ID:277550 发表于 2022-2-2 15:18 | 显示全部楼层
前面的是一般函数。后边的是直接通过变量地址存取值。
回复

使用道具 举报

ID:705806 发表于 2022-2-2 15:54 | 显示全部楼层
daemondong 发表于 2022-2-2 08:12
如果只有一个返回值,这两个函数效果基本一样,只是调用方法不同

a=ReadData(bb)  和 ReadData(bb, &a)
...

谢谢大佬,那我以后就一直用第二个方法吧
回复

使用道具 举报

ID:705806 发表于 2022-2-2 15:55 | 显示全部楼层
Hephaestus 发表于 2022-2-2 12:27
形参实参的概念回去看教科书,这里一两句说不清楚。

电子维修半路出家,就一本Cprimerplus入门  
回复

使用道具 举报

ID:705806 发表于 2022-2-2 18:43 | 显示全部楼层
谢谢各位大佬的指教
回复

使用道具 举报

ID:290373 发表于 2022-2-5 10:52 | 显示全部楼层
指针和形参实参概念,第一个是把值传进来,第二个是把要存放结果的地址传进来,直接对地址上的内容进行修改。
回复

使用道具 举报

ID:491577 发表于 2022-2-5 12:22 | 显示全部楼层
羽翼之凋零 发表于 2022-2-2 15:54
谢谢大佬,那我以后就一直用第二个方法吧

尽量用第一种,方便模块化,第二种有出错的风险,特别是几个函数同时改变一个参数时有可能会出错。
回复

使用道具 举报

ID:883242 发表于 2022-2-5 16:12 | 显示全部楼层
羽翼之凋零 发表于 2022-2-2 15:54
谢谢大佬,那我以后就一直用第二个方法吧

第二个方法未必通用,比如大多数场合只打算传递值,并不想要改变变量的值。
回复

使用道具 举报

ID:587810 发表于 2022-2-5 21:09 | 显示全部楼层
uint8_t *data是指针指向的一个存储区域而uint8_t  byte则不是
回复

使用道具 举报

ID:415064 发表于 2022-2-10 14:47 | 显示全部楼层
第一种是值传递,要开辟新的栈空间来存放这个形参,再把这个形参的数据返回去,再用调用的函数去接    第二种是指针传递,直接修改
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表