« FreeBSD 6.0-RELEASE 正式发布 | Main | soff 发布 腾讯 QQ/TM 珊瑚虫增强包 v4.0 最终测试版 »
November 6, 2005
关于 C++ C php 等语言的参数传递问题: 值传递 引用传递 指针传递等
版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本声明。 https://windtear.net/archives/2005/11/06/000817.html http://windtear.net/archives/2005/11/06/000817.html 关于 C++ C php 等语言的参数传递问题: 值传递 引用传递 指针传递等 这篇blog源于昨天水木社区十大中的一篇征友文章 一id为lonelyangel的网友写了一篇《以程序员的方式征女友!!!!!!》 源程序附后 然后就有不少人对"程序"进行了"批判" (有批参数传递 有批 find =-1的) 这里传递的是值 也就是参数传递概念中的 值传递 根据处理过程: 复制了一份数据进行处理 所以这里应该用引用传递: 即直接操作参数本身 要不然征来征去都是虚幻:P 顺便就想到了参数传递问题 C 语言有值传递(pass by value)和指针传递(pass by pointer)两种 C++ 多了引用传递(pass by reference) php asp 等其他语言也都有这些函数的参数和返回值的传递方式问题 很简单的说: 引用传递就是直接操作参数本身 值传递是复制一份参数然后处理 参数本身之前是啥样 调用参数后还是啥样 指针传递也会改变指针所指的内容 记得林锐在《高质量C++编程指南》中还特意写过这些 (btw 林锐就是写我的大学十年那个林锐 2005-03-13 16:40 个人空间 看林锐《我的大学十年》 ) 所以可以看出 征友的网友程序语言功底也不算扎实 或者仅仅是搞笑而已 这里 HUMAN you 应该用引用传递 即前面加 & 如果是php的话 you 应该是 $you 变量 然后引用传递是 &$you asp/VBScript 等其他语言也都有这些我那天 C# 默认按值传递参数,Visual Basic 默认按引用传递参数 -----> 附 #include "human.h" CLASS HUMAN; BOOL WantGirl(HUMAN you) { HUMAN me; me.City = BEIJING; me.Gender = BOY me.Age =25; // 年龄 me.Height = 173; // 身高 me.Weight = 61; //体重 me.Degree = BACHELOR; // 学历 me.Character = "性格开朗,内外向兼有,孝敬父母,为人诚恳, 幽默风趣,人品好,有上进心,对感情专一"; // 性格 me.Enjoying = "足球、音乐、健身、无不良嗜好"; // 爱好 me.QQ = 103069130; // 联系方式 if(you.City != me.City) return FALSE; if((you.Gender != GIRL) { you.FollowPost(); me.ThankU(); return FALSE; } if((you.Height < 160)||(you.Weight > me.Weight)||(you.Degree < BACHELOR)) { me.BlessYou(); return FALSE; } if(you.Character.Find("开朗"||"人品好"||"对感情专一"|| "孝敬父母"||"温柔贤惠") == -1) return FALSE; you.Consider(me); if(you.FirstSatisfy(me)) { you.Contact(me); me.FeedBack(); me.Consider(you); you.Consider(me); if(you.Satify(me) && me.Satify(you)) return TRUE; else return FALSE; } return FALSE; } |
Posted by windtear at November 6, 2005 1:28 PM