C++中的指针(一)简单指针.pdfVIP

  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++中的指针(一)简单指针 A *pa; 有意点点另人混淆的是指针和 const 的混用。 char chr[] = abc ; const char *p = chr; //这里 p 不是常数指针,而是把指针指向的地址 定义为了常数。无论chr本身是不是指向常数内存区,但只要用p 去操作, 那么就不行以通过 p 去修改其内容。 chr[2] = ’e’; // ok p[2] = ’d’; // error p+=1; // ok, 改的是p 指向的地址而不是 p 的内容。 真正的常数指针这么写 char *const cp = s; 这时在常数内存中 allocate 了一个指针的控件存储cp,cp,也就是这个 地址不能改,而其指向的内存的值可以修改。 chr[2] = ’w’; //ok cp[2] = ’y’; // ok cp+=1; // error char* 可以被转换成 const char*,由于操作后没有负面影响。反过 来 const char* 不能转换成 char*,假如可以的话会把本部可写的内存的 数据改掉。 // g d example char chr[] = “abc “; char *p = chr; const char *cp = p; // bad example char chr[] = “abc “; const char *p = chr; char *p = cp; // error. 这 种 转 换 常 用 在 函数 调 用 上 , 例 如 strcpy(char* source, char*dest)。这个操作只是想修改 source,dest 只是用于参考。为了避 开函数修改 dest 可以把函数定义成 strcpy(char* source, const char* dest)。 根本定义就这些了。对于指针的cast,C++作得比 C 更安全。例如有 两个完全不相干的 class A 和 B。 B b; A *p1,*p2; p1 = (A *)( // 这是 C 式的 cast,不管A 和 B 有什么关系,强型转 换。后果不堪设想。 C++ 中引入了 static_cast 操作,在肯定程度上爱护了操作的安全性, static_cast 检查操作数与要操作的类型是否匹配,匹配是有class 继承 关系,无论谁继承谁都可以。假如这个关系不存在,出编译错误。 p2 = static_cast( //error。 但是这个检查是不完全的, class C : public A {} C* pc = static_cast(p1); // ok. 由于pc,p2 欧继承关系。 C++引入了 RTTI 得概念(Run Time Type Info)。通过 dynamic_cast 操作,可以检查操作数的内容,以确认这个操作是否胜利。检查内容的方 法就是把相关类型的继承关系和vtabl 都查一下。 p2 = dynamic_cast(p1); 在VC 下使用dynamic_cast别忘了在当前Project--Setting 下选Enabl Run Time Type Info 。假如忘了选这个,debug 模式下编译会不通过, releas 模式下会编译通过,运行时 Crash。 dynamic_cast 比拟简单,另外Visual C++各不同版本的表现不一样, 这里具体说一下我学到的和试出来的。一般书上说是三种不怜悯况,考虑 到Visual C++版本的问题,我分五个状况争论。 1。upcast。从派生类向基类的转换,只要基类的继承关系是的,就会胜 利 , 假 如 不 会 有 warning :“dynamic_cast used to convert to inaccessible or ambiguous base; “ 下下面的例子中 class A{public: virtual void a(){}}; class B : public A {}; class C : public B {}; class D : public B {}; class E : public C, public D {}; int main() { E e, *pe =

文档评论(0)

182****9516 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档