C#中ref和out地址传值结合QT中c++以及回调函数的一点理解
来源:互联网 发布:海宁淘宝摄影 编辑:程序博客网 时间:2024/05/13 13:28
原文地址:http://www.cnblogs.com/gsk99/archive/2010/12/13/1904557.html
先说out关键字吧,自己的理解就是在定义一个比如说int a,并没有初始化,在方法里形式参数写out int a,a的初始化是在方法里的,初始化后,a被赋值,就好像是把一个空值放进方法里,然后out抛出一个值。这其实不就是地址传值嘛!课上老师写过这样一段代码。是在qt里用c++写的。
string str = "10";
bool isdouble;
double a = str.toDouble(isdouble);
if(isdouble){
...
}
大概的意思是这样的。定义一个isdouble的bool变量,把一个字符串转化成一个double型变量,重载方法有一个放入bool型变量的,如果在方法里字符串转换成double成功仍然返回一个double变量a,同时isndouble也被赋值为true。接着就可以根据isdouble是否为true进行不同的操作。
查看QT-API文档
从API可以看到,形式参数为一个指针变量,当时用toDouble的时候,放入的是一个&ok, 相当去取ok的地址,让形式参数的指针指向这个ok,,当转换成功的时候,修改ok的值也就相当于修改外边ok的值。这种写法感觉写起来挺干练的,以后可以多尝试。
ref自己好像碰到的比较少,可能也是自己接触的代码还不够多,比较多是out,比如之前看的网络编程的项目,还有unity中好像是摄像机射线检测那边。
ref可以参考文章开头给的文章地址。和out一样都是地址传值,但是在传入方法前先初始化。个人感觉只是细小的差别,只要理解了地址传递和值传递的区别,其实问题并不是很大。
接着这一篇文章是关于回调函数的:http://blog.csdn.net/callmeback/article/details/4242260/
要理解地址传递和值传递那就必须要理解什么是地址,什么是值。我目前想到的,string,int这类都是值,除此之外,像函数都是属于地址,也就是引用类型。在上面回调函数的文章里有这么一段代码 void callback(int times,void (* print)(int)),根据我之前说的,print方法是一个地址,引用类型,那么我在callback方法里放入一个指针变量,指针指向一个函数。在该调用的直接print,就和平常调用方法一样。这里千万要清楚指针的用法。自己再多说两句,比如void printhello() {} 这里printhello是一个地址,放入callback里,callback里指针指向printhello。在后面调用的时候print 这仍然是一个地址。就这样啦
补:java值传递与地址传递 http://blog.csdn.net/liu251890347/article/details/39453989
- C#中ref和out地址传值结合QT中c++以及回调函数的一点理解
- C#中ref和out的理解
- C#中ref 和out 的理解
- C#中使用ref 和 out 的一点认识
- C#中使用ref和out一点认识!
- C#中使用ref和out一点认识!
- C#中使用ref和out一点认识
- C#中使用ref和out一点认识!
- C#中使用ref和out一点认识!
- C#中委托、事件和回调函数的理解
- c#中ref和out的区别
- C#中out和ref的区别
- C#中out和ref的区别
- C#中ref和out的区别
- C#中ref和out的区别
- c#中ref和out的区别
- C#中out和ref的区别
- C#中ref和out的区别
- 每天一个linux命令(28):tar命令
- 闭包-小题目
- JS math.random随机数,产生指定范围内的随机整数的代码
- C++ 对象内存布局和多态实现原理
- “区块链“ 究竟是什么
- C#中ref和out地址传值结合QT中c++以及回调函数的一点理解
- rownum和rowid 的区别
- 每天一个linux命令(29):chgrp命令
- 数据渲染时js不被触发 解决方案
- java模拟http请求工具类
- NYOJ部分和问题
- Hacker Rank: Gridland Metro解题报告
- MindManager,818“烧走”拖延症
- JavaScript实现类的模拟