一、
關於char *s 和char s[]區別的筆試題,雖說佔的分數不多,但是基本每家公司都會考!所以在此做個小總結!避免自己在犯錯誤!當初就是因爲這麼小的問題,被一家大公司拒之門外!基礎很重要的啊親!
看下面的代碼:
char *s="123456";
cout<<*s<<endl;//1
cout<<s<<endl;//123456
printf("%x\n",*s);//31
printf("%x\n",*(s+1));//32
printf("%x\n",s);//432024
printf("%s\n",s);//123456
你看明白了嗎?
知道原因不?
知道原因的敬請留言!
二、
char a[]="hello";
char *s="hello";
數組a分配在棧上,內容可以修改;s內容在常量區,內容不允許修改!
還有一道題是:我在另外一篇文章已經說到!點擊看下!
總感覺一篇文章只寫上面那麼多,有點像是忽悠人,故加點內容哈!
昨天有人問了這樣一題目:
#include "stdafx.h"
#include <iostream>
using namespace std;
class B {
public:
virtual void fun(int i = 1) { cout <<"B::"<<i << endl; }
};
class D : public B {
public:
virtual void fun(int i = 3) { cout <<"D::"<< i << endl; }
};
int main(int argc, char* argv[])
{
B* p1;
B* p2 = new B;
B* p3 = new D;
p2->fun();
p3->fun();
return 0;
}
輸出什麼:
一開始很多人的回答是: 1 和3 理由:對象指針指向自己的虛方法。
答案真的是這樣嗎?
正確答案是:1 和1
這是爲什麼。決不要重新定義繼承而來的缺省參數值。Effective C++ 第38款說的很清楚。虛函數是動態綁定。
爲什麼C++堅持這種有違常規的做法呢?答案和運行效率有關。如果缺省參數值被動態綁定,編譯器就必須想辦法爲虛函數在運行時確定合適的缺省值,這將比現在採用的在編譯階段確定缺省值的機制更慢更復雜。做出這種選擇是想求得速度上的提高和實現上的簡便,所以大家現在才能感受得到程序運行的高效;當然,如果忽視了本條款的建議,就會帶來混亂。