C C基本概念详解.docxVIP

  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 C++基本概念详解 关于引用和指针 概念上,引用()并不是对象,而是一个已经存在的对象的别名;引用不可以重新绑定到另外一个对象,因此引用必须初始化。(类比 const,一经定义就不能修改,所以必须初始化,是同样的道理。) 引用和指针都是实现了其他对象的间接访问。不同的是:指针本身就是一个对象,允许对指针进行赋值和拷贝;指针无需在定义时赋初值。 对于引用的概念,通过这段代码加深印象: int ival=12; int *p=ival; int refval=ival; int *p1=refval; int refval=ival;中的是代表引用声明符号;而int *p1=refval;的则代表取地址。 如下图的 watch 中所示,可以看出 p 和 p1 这两个指针的值(所存放的地址值0x0039F1D8),以及这两个指针所指向的值(12)是完全一样的(其实有点废话,既然两个指针都是指向同一个地址,自然指向的值是一样的),也就是 ival 和它的引用 refval 是等价的。 注意:虽然指针p1 初始化为refval,而refval 和ival 这两个值是不一样的,也就是refval 和 ival 是存放在内存中的不同地址上,但是 int *p1=refval 这句初始化之后,p1 指针上存的值其实并不是refval 的地址,而是refval 所引用的变量ival 的地址。因此,这里就更明确了:引用的作用就相当于代言者,这个代言者所说所做的一切都代表了原始对象,与引用自身无关。 由于引用不是对象,所以不存在指向引用的指针。我想基本上这也上面那句 int *p1=refval 之后,p1 的值竟然是 ival 的地址的概念上的辅证。但是存在指针的引用。 关于 const 如果利用一个对象去初始化另外一个对象,则他们是否是const 都无所谓。常量特性仅仅是用于限定其初始化之后不可修改。 如果想在多个文件中共享 const 对象,必须在变量的定义之前添加 extern 关键字。 3.C 风格字符串 C 风格字符串不是一种类型,而是为了表达和使用字符串而形成的一种约定俗成的写法,按此习惯书写的字符串存放在字符数组中并用空字符(\0)结束。 char ca[] = { C, +, + }; cout strlen(ca) endl; 上面的示例中,ca 虽然是一个字符数组,但是它并没有以\0结束,因此这段代码输出的结果不可知。strlen 函数在执行的时候可能沿着 ca 在内存中的位置不断向前寻找,直到遇到\0才结束。 而只有这样: char ca[] = { C, +, +, \0 }; cout strlen(ca) endl; 才能保证输出的结果是 3. 再定义两个字符数组来说明: char ca1[] = string 1; char ca2[] = string 2; 由于在使用数组的时候,其实真正使用的是指向数组的首元素的指针。因此我们不能使 用 if(ca1ca2)这样的语句进行这两个字符数组的比较;也不能使用 ca1+ca2 这样的语句进行字符串的串联操作。 我们必须使用 strcmp 进行字符串比较操作;使用 strcpy 和 strcat 进行字符串的拷贝和连接操作,而且在 strcpy 和 strcat 函数的使用的时候,我们要非常仔细的检查字符数组的容量: char sumStr[40];//注意数组容量,调试的时候又想起了最近看到的关于“烫烫烫烫” 的冷笑话 strcpy(sumStr, ca1); strcat(sumStr, -); strcat(sumStr, ca2); (ps:在 vs2013 上进行编译的时候,编译器直接告诉我:strcpy: This function or variable may be unsafe. Consider using strcpy_s instead char sumStr[40]; strcpy_s(sumStr, ca1); strcat_s(sumStr, -); strcat_s(sumStr, ca2); 需要说的是:strcpy_s、strcat_s 是 VS 后续版本中微软新推出的更安全的函数,并非标准库里面的。所以还是建议使用 string 以保证可移植) 函数返回类型 函数返回类型不能是数组类型或者函数类型,但是可以是指向数组或者函数的指针。 通过引用避免拷贝 针对函数形参,拷贝大的类类型对象或者容器时效率比较低,甚至有的类型(比如 IO 类型)根本不支持对象拷贝,这种情况就必须使用引用参数。另外,为了避免在函数内修改实参,我们可以使用常量引用。 bool cmp_length(const string s1, const str

文档评论(0)

hao187 + 关注
官方认证
文档贡献者

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

认证主体 武汉豪锦宏商务信息咨询服务有限公司
IP属地上海
统一社会信用代码/组织机构代码
91420100MA4F3KHG8Q

1亿VIP精品文档

相关文档