巧妙C++
今天,师兄谈及了公司招聘时候考的C++题,听了之后有一种醍醐灌顶的感觉,原来C++这么深不可测,真的需要看一下Effective C++。当然就听到的感受分享一下….
1.首先是交换二个数据,我们平时都用了第三个变量,最多也就知道不用第三个变量交换实数的方法,勉强就是什么加法吧~~~可是,师兄说,不能用哪种方法,myGod,难道还有第三种方法,哎~~~要是我去面试,定死定了。那么是什么方法呢,即用异或即可,高效,而且还可以处理任何数据类型。如下:
- >>> # Swap two integer number
- >>> a = 10
- >>> b = 23
- >>> print "The a={0}, b={1} before swapping".format(a, b)
- The a=10, b=23 before swapping
- >>> a ^= b
- >>> b ^= a
- >>> a ^= b
- >>> print "The a={0}, b={1} after swapping".format(a, b)
- The a=23, b=10 after swapping
2.全局变量是放在堆里,而局部变量是放在栈里,如new,static等开辟异或申明的变量都是放在堆里的。所以,在函数中,不能返回局部指针,如
- void foo( char * pChar )
- {
- pChar = new char [10];
- char tempStr[] = "hexiong";
- strcpy(pChar, tempStr);
- pChar[ strlen(tempStr) ] = '\0';
- }
这样会报错,当然有二种方式可以解决,第一种,用引用。。。。
- void foo( char * &pChar )
- {
- pChar = new char [10];
- char tempStr[] = "hexiong";
- strcpy(pChar, tempStr);
- pChar[ strlen(tempStr) ] = '\0';
- }
第二种,用**
- void foo(char **pChar)
- {
- *pChar = new char [10];
- char tempStr[] = "hexiong";
- strcpy(*pChar, tempStr);
- (*pChar)[strlen(tempStr)] = '\0';
- }
当然,我更喜欢第一种方式…..
-----------------打造高质量的文章 更多关注 把酒泯恩仇---------------
为了打造高质量的文章,请 推荐 一下吧。。。。谢谢了,请关注我后续的文章,会更精彩哦
请关注sina微博:http://weibo.com/baiyang26
把酒泯恩仇官方博客:http://www.ibaiyang.org 【推荐用google reader订阅】
把酒泯恩仇官方豆瓣:http://www.douban.com/people/baiyang26/
如果您想转载本博客,请注明出处
如果您对本文有意见或者建议,欢迎留言