指针问题。两种写法的区别

dsoyy 2014-02-13 03:08:17
1、
void f1(u32* result)
{
pr->rxdat = result;
getdat(pr);
}
2、
u32 read_dat = 0;
u8 f1()
{
pr->rxdat = (void *)&read_dat;
getdat(pr);
}

着两种写法的区别是什么?
...全文
474 18 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaohuh421 2014-02-17
  • 打赏
  • 举报
回复
我觉得最重要的区别是, 1可以适用于其它数据. 而2已经定死了, 只能对read_dat操作.
MuteCoder 2014-02-16
  • 打赏
  • 举报
回复
不明白!第二种写法不需要返回一个值吗?
Qian_F 2014-02-16
  • 打赏
  • 举报
回复
第1种写法比第2种写法多了一个传值过程。 如果调用第1种写法:void f1(&read_dat),事实上是先把&read_dat的值传给了函数f1()的参数result,然后再在f1()中使用reslut。而对于第2种写法就是直接使用&result,就少了这个传值过程了。事实上,两种方式达到的效果是一样的。 最后要说明的是,你第2种写法没有u8类型的返回值。
mujiok2003 2014-02-16
  • 打赏
  • 举报
回复
依赖不一样!
china_helper 2014-02-15
  • 打赏
  • 举报
回复
从指针来看没什么区别啊
gascans 2014-02-15
  • 打赏
  • 举报
回复
若不需要改变全局变量,则用第一种; 若必须改变全局变量,则用第二种,有时这是必须的。
tuzhutuzhu 2014-02-15
  • 打赏
  • 举报
回复
第一种是参数传递,第二个是全局变量 如版主所说,最大的区别是函数返回值类型不同。。
版主大哥 2014-02-15
  • 打赏
  • 举报
回复
u32 read_dat = 0; u8 f1() { pr->rxdat = (void *)&read_dat; getdat(pr); } 这个函数重入就危险了...
Beinggeek 2014-02-15
  • 打赏
  • 举报
回复
第二个感觉问题蛮多的
飞天御剑流 2014-02-15
  • 打赏
  • 举报
回复
引用 楼主 dsoyy 的回复:
1、 void f1(u32* result) { pr->rxdat = result; getdat(pr); } 2、 u32 read_dat = 0; u8 f1() { pr->rxdat = (void *)&read_dat; getdat(pr); } 着两种写法的区别是什么?
rxdat的类型是什么?
push0529 2014-02-15
  • 打赏
  • 举报
回复
第一个看不出什么问题来 第二个的话,问题太多了,跟这样的人做同事我会觉得恐怖 u32 read_dat = 0; //尽量避免使用全局变量 u8 f1() //危险,不会进行参数检查 { pr->rxdat = (void *)&read_dat; //强制类型转换,慎用,随意使用void指针是不负责任的表现 getdat(pr); }
derekrose 2014-02-13
  • 打赏
  • 举报
回复
最主要的区别就是第二个有返回值...
zhuobattle 2014-02-13
  • 打赏
  • 举报
回复
&read_dat的结果就是u32*,你要的区别是什么?
nightkids_008 2014-02-13
  • 打赏
  • 举报
回复
在内存的位置不一样
赵4老师 2014-02-13
  • 打赏
  • 举报
回复
一个用函数参数一个用全局变量。
dsoyy 2014-02-13
  • 打赏
  • 举报
回复
那就是没区别了
  • 打赏
  • 举报
回复
pr->rxdat = result; 下面有做指针转换~ pr->rxdat = (void *)&read_dat;
大奶兔白糖 2014-02-13
  • 打赏
  • 举报
回复
区别。。。。。。。

70,023

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧