C++考卷及答案.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文档。上传文档
查看更多
C考卷及答案C考卷及答案

char s1[] = ; char s2[] = Hello World;(Hello和World之间是一个空格) char *p = s2; char *r = new char[100]; 请计算: sizeof(s1)=?1 sizeof(s2)=? 12 sizeof(p)=? 4 sizeof(r)=?4 char s3[10] = {m,o,b,i,l,}; char s4[20] = {A,N,S,I,\0,C,+,+,}; 请计算: strlen(s3)=?5 strlen(s4)=?4 void Func(char str[100]) { 请计算:sizeof(str)=?4 但是有一点要注意,在这个函数中,strlen(str)的结果是未定义。因为strlen是计算一个字符串的实际长度,其代码实现是寻找该字符串中的\0的位置。\0之前的就算实际长度。但是str被初始化了吗?不知道。如果被初始化了,\0的位置确定,通过寻找\0的位置,可以知道有多少个有效字符;但是如果str没有被初始化,没有\0,strlen函数就失效了,计算不出来有多少个有效字符。 } 关于内存的问题: void GetMemory(char *p, int num) { p = (char*)malloc(sizeof(char)*num); } void Test(void) { char *str = NULL; GetMemory(str,100); str仍然为NULL strcpy(str,hello); 运行时出错 coutstrendl; } 请问运行Test函数的结果如何? 毛病出在GetMemory中。编译器总是要为函数的每个参数制作临时副本,指针参数p的副本是_p, 编译器使_p=p。如果函数体内的程序修改了_p指向的内容,就导致参数p指向的内容做了相应的修改(因为它们指向同一块内存空间)。这就是指针可以用做输出参数的原因。但是在本题中,_p申请了新的内存,只是把_p本身的值改变了,即指向了新的内存空间,但是p本身丝毫未变。所以函数GetMemory并不能输出任何东西。事实上,每执行一次GetMemory就会泄露一块内存,因为没有用free释放内存。 void GetMemory2(char **p,int num) { *p = (char*)malloc(sizeof(char)*num); } void Test2(void) { char *str = NULL; GetMemory2(str,100); strcpy(str,hello); coutstrendl; } 请问运行Test2函数的结果如何? 输出hello,但是有内存泄露。使用指向指针的指针,用于在子函数中修改指针的值。 char *GetMemory3(int num) { char *p = (char*)malloc(sizeof(char)*num); return p; } void Test3(void) { char *str = NULL; str = GetMemory3(100); strcpy(str,hello); coutstrendl; } 请问运行Test3函数的结果如何? 输出hello,但是有内存泄露。使用函数返回值来传递动态内存,这种方法比使用指向指针的指针或者指针的引用容易理解。 char *GetString() { char p[] = hello world; return p; } void Test4(void) { char *str = NULL; str = GetString(); str的内容是垃圾 coutstrendl; } 请问运行Test4函数的结果如何? 不要用return语句返回指向栈内存的指针或引用,因为该内存在函数结束时将自动释放。Str的数值在调用GetString后不再为NULL,但是所申请的内存没有了。 char *GetString2() { char *p = hello world;//这里面有个C++对C的豁免权问题。在这句话里面,hello world是个常量字符串,其数值不能被修改。如果有个指针指向该字符串,也不能修改其数值。因此,该指针应该被定义为const char *p。但是,世界上先有的C,后有的C++。C里面有大量的char *p = hello world;这种写法,而C++需要对C兼容。因此,在这个问题上,C++对C进行了特别豁免。如果我们试

文档评论(0)

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

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

1亿VIP精品文档

相关文档