网上找的一些笔试题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了网上找的一些笔试题相关的知识,希望对你有一定的参考价值。
1.(http://group.jobbole.com/13838/)
搜狗2016研发工程师笔试题
1 int main(int argc, char *argv[]) 2 { 3 string a="hello world"; 4 string b=a; 5 if (a.c_str()==b.c_str()) 6 { 7 cout<<"true"<<endl; 8 } 9 else cout<<"false"<<endl; 10 string c=b; 11 c=""; 12 if (a.c_str()==b.c_str()) 13 { 14 cout<<"true"<<endl; 15 } 16 else cout<<"false"<<endl; 17 a=""; 18 if (a.c_str()==b.c_str()) 19 { 20 cout<<"true"<<endl; 21 } 22 else cout<<"false"<<endl; 23 return 0; 24 }
关于代码输出正确的结果是( )
- false false false
- true false false
- true true true
- true true false
在我的windows10+tdm gcc 5.x上运行结果是 全 false
而根据gdb中调试的结果可以看出,c_str返回的是一个字符指针,也就是说每一个string对象应用此函数的结果都是生成一个字符数组,这个数组的首地址指针被返回,而且根据后续的调试,比如a=""之后的结果来看,这个数组的首地址位置是固定的,也就是说,第一次对a.c_str返回的指针如果是
(gdb) p a.c_str()
$1 = 0x24fe20 "hello world"
在a=""之后
(gdb) p a.c_str()
$6 = 0x24fe20 ""
地址没变。
所以,上面的所有a和b的c_str结果对比都不相等。
另外c++ primer 5 中的知识点,使用b=a和使用b(a)效果相似,是进行的拷贝初始化而非直接初始化,因此两个对象不相同,但是对于重载的==来说,是根据包含的字符相同则返回true。
以上是关于网上找的一些笔试题的主要内容,如果未能解决你的问题,请参考以下文章