程序員筆試題---說說char *s 和char s[]

一、

關於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++堅持這種有違常規的做法呢?答案和運行效率有關。如果缺省參數值被動態綁定,編譯器就必須想辦法爲虛函數在運行時確定合適的缺省值,這將比現在採用的在編譯階段確定缺省值的機制更慢更復雜。做出這種選擇是想求得速度上的提高和實現上的簡便,所以大家現在才能感受得到程序運行的高效;當然,如果忽視了本條款的建議,就會帶來混亂。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章