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


文档评论(0)