CC++经常记不得的地方.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文档。上传文档
查看更多
CC经常记不得的地方

? C/C++经常记不得的地方 1、常量指针VS指针常量 const int* 和int const* int 一样,就是常指针 也就是它所指向的数据(在这是int)是常量,它自己的数据类型是const int* 1? int*?const?p;???//?指针常量?指针p指向的值不可修改?? const修饰的是 p 2? ? 3? const?int*?p;???//?常量指针?指针p不可修改????????? const修饰的是 *p 4? int?const*?p;???//?常量指针?指针p不可修改 2、指针数组VS指向数组的指针 指针数组,是指数组元素为指针的数组 1? int*?P[N]; 指向数组,的指针指的是数组中的每个元素是一个指针 1? int?(*P)[N]; 3、sizeof数组和指针 1? int?arr[5]; 2? coutsizeof(arr);????//?输出是20 因为是sizeof(int)*5 可以用通过它来计算一个数组的元素个数 当数组是函数的参数时,sizeof对它不可用 因为指针本身是32位四个字节的 所以 1? char*?p;? 2? sizeof(p)?==?4; 标准C++中 其返回类型为size_t 标准C++的 sizeof还可以作用于对象 sizeof引用 返回引用对象的存储大小 sizeof指针的解引用 返回解引用的空间大小 4、数组引用 1? int?(arr)[N]; 5、指向函数的指针 1? int?(*fun)(int,?int) 6、函数接口中的指向指针的指针 7、 || 和 操作符第一个操作数往往能决定最终结果 从而忽略第二个操作数 8、%的操作数要是整形 9、!对于非0操作 结果是fasle 10、判断bool的变量val是否成立时候 通常用if(val) 11、位异或是^ 就是位的非进位加法 12、*p++相当于 *(p++) 由于++在后 还是对原先的p进行解引用的 13、if((i = 5) 0) 先赋值 再判断 注意为什么加括号 14、i = p = 7; 这里是右结合的 15、*iter.empty();? . 的优先级高一些 所以是错误的表达 16、iter++-empty(); 先empty再++ 17、条件表达式的优先级相当低 cout(i j ? i : j); cout(i j) ? i : j;?? // 等价于cout ? i : j couti j ? i : j;?????? // 错误 cout j ? i : j 18、优先级的判断 19、new和delete int *p = new int(10); int *p = new int[10]; int *p = new int[10](10); delete是针对内存的 不是new出来的内存就无法释放了 int i; int *p = i; delete p;? // error 但是大部分编译器还能通过 如果p = NULL; delete p也是安全的 const int *p = new const int(1024); new出来的const不可被修改但同样可以被删除 delete p; 20、 可变参数 1? void?va_start(?va_list?arg_ptr,?prev_param?); 2? type?va_arg(?va_list?arg_ptr,?type?); 3? void?va_end(?va_list?arg_ptr?); ? 1? void?simple_va_fun(int?i,?...) 2? { 3? ??va_list?arg_ptr; 4? ??int?j=0;? 5? ??va_start(arg_ptr,?i); 6? ??j=va_arg(arg_ptr,?int); 7? ??va_end(arg_ptr); 8? ??printf(%d?%d/n,?i,?j); 9? ??return; 10? } 1)首先在函数里定义一个va_list型的变量,这里是arg_ptr,这个变量是指向参数的指针。? 2)然后用va_start宏初始化变量arg_ptr,这个宏的第二个参数是第一个可变参数的前一个参数,是一个固定的参数。 3)然后用va_arg返回可变的参数,并赋值给整数j. va_arg的第二个参数是你要返回的参数的类型,这里是int型。? 4)最后用va_end宏结束可变参数的获取.然后你就可以在函数里使用第二个参数了.如果函数有多个可变参数的,依次调用va_arg获取各个参数。 21、main的参数 main(int argc, char*arg

您可能关注的文档

文档评论(0)

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

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

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档