网上找的一些笔试题

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 }

关于代码输出正确的结果是( )

  1. false false false
  2. true false false
  3. true true true
  4. 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。

 

以上是关于网上找的一些笔试题的主要内容,如果未能解决你的问题,请参考以下文章

对Thoughtworks的有趣笔试题实践

笔试题73. LeetCode OJ (60)

asp.net 部分面试问题总结(附答案),比大篇幅的笔试题管用

一道简单的 Java 笔试题,但值得很多人反思

笔试题-同线程Lock语句递归不会死锁

数据挖掘2022年2023届秋招Kanaries雾角科技算法岗 笔试题