c++javac 几种编程语言的指针引用比较.docVIP

c++javac 几种编程语言的指针引用比较.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
c++javac 几种编程语言的指针引用比较.doc

前一段时间,我在 cnblogs 别人的博客中,谈到: java 中的引用/指针,与 c++/C# 中的引用/指针不是一个概念. Java 引用,相当于 c++ 指针(fun3)。Java 引用可以赋值 null, 而 c++ 引用 (见 fun2) 不能赋值 null,c++ 指针可以赋值 null(fun3). Java 中,无 c++ 引用(fun2)对应的语法。 结果引起不必要的质疑,特此,写博客,对c++/java/c# 几种编程语言的指针、引用,进行比较,期望引起更多的人,对此有所关注。 从语法上看,三种开发语言中,C++ 的指针、引用,最为复杂,因此,下面的举例,都从 C++ 代码开始,然后与 java/c# 的语法进行比较。 1)? C++ 简单类型变量,有直接变量定义、指针定义、引用定义。 int aa = 10;//c++ int bb = aa;//c++ int *cc = aa;//c++ 上述三行代码,最后三个变量指向同一个数据。相比较而言,java/c# 都只有变量定义,无引用定义、指针定义。 ? 2) C++ 函数调用参数,简单类型变量,有直接变量定义、指针定义、引用定义,后两个,在函数内部改变数据,退出函数, 能看到改变后的数据。 void simple_by_val(int a, const int b) { a=15; //b=13; //error C2166: l-value specifies const object //a=NULL; //good //b=NULL; //error C2166: l-value specifies const object } void simple_by_ref(int a, const int b) { a=25; //b=23; //error C2166: l-value specifies const object //a=NULL; //good //b=NULL; //error C2166: l-value specifies const object } void simple_by_pointer(int *a, const int *b) { *a = 35; //*b = 33; //error C2166: l-value specifies const object a = NULL; //ok b = NULL; //ok } java 没有这么多名堂,只有直接变量定义。C# 略为复杂一点,有引用,有 out 参数。 static void M(int a, ref int b, out int c) { c = 13; } 相比较而言,C# 的函数参数( ref int b), 类似于C++的函数参数( int a),都是调用函数前要赋初值,在函数内部改变数据,退出函数,能看到改变后的数据。 而 C# 的 (out int c),在 C++/Java 中,无对应的语法。这个可以调用函数前,不赋初值。在 C# 之前,也很少见到这种语法, 只在一些数据库的存储过程、函数定义中,见过类似语法。估计是从数据库编程语法中抄袭过来的语法。 特别注明:C# 的引用,只是用在函数参数变量定义上,不能用在函数内部的局部变量中。C++ 中的引用,可以用在函数内部的局部变量中。 ? 3)? C++ 的类对象语法,较为复杂,可以定义在stack 上(不用 new),可以定义在 heap(用 new)。 CMyClass obj; //stack CMyClass *p2 = new CMyClass(); //heap java/C# 中,没有这么复杂,可以认为是上述两种“综合+简化”了。 ? 4) 在 java/C# 中,如下用法是错误的,会报空指针异常;但是在 C++ 里是合法的。 CMyClass obj; obj.run(); 在 C++ 中, CMyClass obj; 以上一行代码已经调用了构造函数,完成了变量初始化。而在 java/C# 中,这一行代码相当于: CMyClass obj = null; ? 5) C++ 中,stack 变量出了作用范围,内存自动回收;heap 变量,需要手工 de

文档评论(0)

juhui05 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档