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

原创粉丝点击