手机站
网通分站
电信主站
密 码:
用户名:
当前位置 : 主页>程序设计>C/C++>列表

c/c 初学的一定要看

来源:互联网 作者:west263.com 时间:2008-02-23
西部数码-全国虚拟主机10强!40余项虚拟主机管理功能,全国领先!双线多线虚拟主机南北访问畅通无阻!免费赠送企业邮局,.CN域名,自助建站480元起,免费试用7天,满意再付款! P4主机租用799元/月.月付免压金!

声明一下,本人但是菜鸟一个,有什么理解上的错误,希望大家能指出。
函数是最长用到的知识。试想一下,假如没有函数,您的main函数可能长的连您自己都觉得不好意思。既然每个人都会经常使用函数,我们有必要好好的理解函数的知识。
函数主要的知识点就是函数的声明,定义,调用。
今天主要讲函数的定义和调用。先简要的说一下声明。当调用函数在定义函数之前就应当声明一下告诉系统函数讲在后边定义。当在多文档时也应在其他文档外调用本文档函数时在调用前声明。声明其实就是简单的把定义函数的首部(返回类型,函数名,形参类型)写出来,以;结束。形参名可写可不写。但有特别情况。我后边再说!
函数的定义大家最容易乱的就是行参和的类型和函数的返回值。
我总结了一下可分为几种。

1:以实参的副本形式。
这种方式最容易理解,就是很多教程上所说的值传递。把实参的值复制给形参创建的局部对象。函数对形参做的改变不会影响到实参,因为他们是不同的对象。在讨论一下这种情况下的const。因为形参和实参是不同的对象,唯一的联系只是调用时的值传递,所以形参和实参的const修饰没有限制。常量也能够做为实参调用。但是声明为const的形参,只能引用,不能改变他的值。这大家应该是知道的。

2:以指针传送地址的形式。

这种方式最令C语言初学者头疼。因为是指针所以传递的是地址。也就是说实参向形参传递的是实参所指向对象的地址。既然这样,形参在函数中谢引用所改变的值,同时也改变了实参所指向对象的值,因为他们本身就是指象一个地址,即同一个对象。但因为函数调用所创建的局部形参指针,他也是实参指针的副本,所以当改变形参的指针值(即指向另一个对象)实参是没有随之改变的。
讨论一下这种情况下的const。
当然传送的是地址就肯定不能是常量了。有很多中情况。假如假如实参是指向非const型的,形参能够是指向const型的也能够是非const型的。当实参是指向const型的,形参也应该是指向const的。因为当在函数中改变了形参指针所指向的内容就是改变了实参指向的内容,但这显然和形参是指向const型的相矛盾。当然我们知道c语言中函数名代表数组的首地址。所以实参同样能够传递数组名。当然也能够通过取地址符来做实参传递地址。指向const的指针同样只能引用,不能改变指向内容的值。

3:以引用形式,即和实参的对象相关联。
引用是c 中才能见到的知识点。引用大家都很清楚是个对象的别名,也就是说把引用名和一个对象相关联,他们是同一块内存空间的名字。既然这样。当形参定义成引用时很容易就能理解为什么函数中对引用的改变同时也是对实参的改变。
讨论一下这种情况的const
当形参是非const型的引用。实参不能是const型的对象。大家看完指针的部分应该就能理解这里。同样不能用常量值来做为实参。也不能用需要转换的类型的对象来做实参。只能用完全同类型的非const对象来做实参。但当形参为const型的引用时能够用非const对象做实参,也能够用常量来做。

还要补充几点:
1。传递指向指针的引用。
形参定义为int *&a
a是个指针。和实参的指针相关联。函数中改变了a的值,就是改变了实参指针的指向。

2。通过引用传递数组。平时我门都是传递数组的地址。形参作为指针来通过解操作符(*)引用数组元素。或是传递数组地址。形参同样是数组名来接收。
但是通过引用传递数组是传递实参数组本身。所以形参的大小也要匹配。如 int (&arr)[10]


从代码效率上来看。假如是以实参的副本形式传递。那过程效率是相对低一些。他要创建新的对象。来接受实参传来的值。用指针相对来说好一些。尤其在传递类类型时,毕竟函数调用时建立的临时指针。只占4字节。当为引用形式时效率就很高了,因为他就是实参本身。当传递类类型时,假如类类型sizeof()的值很大。用复制实参的形式虽然能够,但是效率太低,但假如用引用我认为是很好的办法,但前边说了,假如形参是非const型引用,实参是有需要的,所以假如不改变型参值的话一般定义为const




文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

热点关注
IDC资讯 虚拟主机 域名注册 托管租用 vps主机 智能建站
网站运营 建站经验 策划盈利 搜索优化 网站推广 免费资源
网站联盟 联盟新闻 联盟介绍 联盟点评 网赚技巧
行业资讯 业界动态 搜索引擎 网络游戏 门户动态 电子商务 广告传媒
网络编程 Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术 Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷 Internet Explorer
网页制作 FrontPages Dreamweaver Javascript css photoshop fireworks Flash
程序设计 Java技术 C/C++ VB delphi
网络知识 网络协议 网络安全 网络管理 组网方案 Cisco技术
操作系统 Win2000 WinXP Win2003 Mac OS Linux FreeBSD
返回首页 |关于我们 | 联系我们 | 付款方式 | 创业联盟 | 价格总览 | 资讯中心 | 友情链接 | 网站地图 | 招贤纳士 | RSS