巧妙C++

今天,师兄谈及了公司招聘时候考的C++题,听了之后有一种醍醐灌顶的感觉,原来C++这么深不可测,真的需要看一下Effective C++。当然就听到的感受分享一下….
1.首先是交换二个数据,我们平时都用了第三个变量,最多也就知道不用第三个变量交换实数的方法,勉强就是什么加法吧~~~可是,师兄说,不能用哪种方法,myGod,难道还有第三种方法,哎~~~要是我去面试,定死定了。那么是什么方法呢,即用异或即可,高效,而且还可以处理任何数据类型。如下:

  1. >>> # Swap two integer number  
  2. >>> a = 10  
  3. >>> b = 23  
  4. >>> print "The a={0}, b={1} before swapping".format(a, b)  
  5. The a=10, b=23 before swapping  
  6. >>> a ^= b  
  7. >>> b ^= a  
  8. >>> a ^= b  
  9. >>> print "The a={0}, b={1} after swapping".format(a, b)  
  10. The a=23, b=10 after swapping  

2.全局变量是放在堆里,而局部变量是放在栈里,如new,static等开辟异或申明的变量都是放在堆里的。所以,在函数中,不能返回局部指针,如

  1. void foo( char * pChar )  
  2. {  
  3.     pChar = new char [10];  
  4.     char tempStr[] = "hexiong";  
  5.     strcpy(pChar, tempStr);  
  6.     pChar[ strlen(tempStr) ] = '\0';  
  7.  }  

这样会报错,当然有二种方式可以解决,第一种,用引用。。。。

  1. void foo( char * &pChar )  
  2. {  
  3.     pChar = new char [10];  
  4.     char tempStr[] = "hexiong";  
  5.     strcpy(pChar, tempStr);  
  6.     pChar[ strlen(tempStr) ] = '\0';  
  7.  }  

第二种,用**

  1. void foo(char **pChar)  
  2.     {  
  3.       *pChar = new char [10];  
  4.       char tempStr[] = "hexiong";  
  5.       strcpy(*pChar, tempStr);  
  6.       (*pChar)[strlen(tempStr)] = '\0';  
  7.     }  

当然,我更喜欢第一种方式…..

 

-----------------打造高质量的文章 更多关注 把酒泯恩仇---------------

为了打造高质量的文章,请  推荐  一下吧。。。。谢谢了,请关注我后续的文章,会更精彩哦

请关注sina微博:http://weibo.com/baiyang26

把酒泯恩仇官方博客:http://www.ibaiyang.org 【推荐用google reader订阅】

把酒泯恩仇官方豆瓣:http://www.douban.com/people/baiyang26/

如果您想转载本博客,请注明出处

如果您对本文有意见或者建议,欢迎留言

posted @ 2012-12-07 19:55  把酒泯恩仇  阅读(273)  评论(0编辑  收藏  举报