关于指针的一些问题.docVIP

  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文档。上传文档
查看更多
关于指针的一些问题

关于const?char*,?char?const*,?char*const 作者:乌鸦 日期:2007-03-18 字体大小: 小 中 大 const char*, char const*, char*const的区别问题几乎是C++面试中每次都会有的题目。 事实上这个概念谁都有,只是三种声明方式非常相似很容易记混。 Bjarne在他的The C++ Programming Language里面给出过一个助记的方法: 把一个声明从右向左读。 char * const cp; ( * 读成 pointer to ) cp is a const pointer to char const char * p; p is a pointer to const char; char const * p; 同上因为C++里面没有const*的运算符,所以const只能属于前面的类型。 C++标准规定,const关键字放在类型或变量名之前等价的。 const int n=5; //same as below int const m=10; const int *p; //same as below const (int) * p int const *q; // (int) const *p char ** p1; // pointer to pointer to char const char **p2; // pointer to pointer to const char char * const * p3; // pointer to const pointer to char const char * const * p4; // pointer to const pointer to const char char ** const p5; // const pointer to pointer to char const char ** const p6; // const pointer to pointer to const char char * const * const p7; // const pointer to const pointer to char const char * const * const p8; // const pointer to const pointer to const char 说到这里,我们可以看一道以前Google的笔试题: [题目]const char *p=hello; ?????? foo(p);//函数foo(const char **pp) 下面说法正确的是[] A.函数foo()不能改变p指向的字符串内容 B.函数foo()不能使指针p指向malloc生成的地址 C.函数foo()可以使p指向新的字符串常量 D.函数foo()可以把p赋值为 NULL. 至于这道题的答案是众说纷纭。针对上面这道题,我们可以用下面的程序测试: #include stdio.h #include stdlib.h #include stdio.h void foo(const char **pp) { //??? *pp=NULL; //??? *pp=Hello world!; ??????? *pp = (char *) malloc(10); ??????? snprintf(*pp, 10, hi google!); //?????? (*pp)[1] = x; } int main() { ??? const char *p=hello; ??? printf(before foo %s\n,p); ??? foo(p); ??? printf(after foo %s\n,p); ??? p[1] = x; ??? return; } 结论如下: 在foo函数中,可以使main函数中p指向的新的字符串常量。 在foo函数中,可以使main函数中的p指向NULL。 在foo函数中,可以使main函数中的p指向由malloc生成的内存块,并可以在main中用free释放,但是会有警告。但是注意,即使在foo中让p指向了由malloc生成的内存块,但是仍旧不能用p[1]=x;这样的语句改变p指向的内容。 在foo中,不能用(*pp)[1]=x;这样的语句改变p的内容。 ????? 所以,感觉gcc只是根据const的字面的意思对其作了限制,即对于const char*p这样的指针,不管后来p实际指向mall

文档评论(0)

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

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

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档