- 相關推薦
c++程序員面試題目
1.是不是一個父類寫了一個virtual 函數,如果子類覆蓋它的函數不加virtual ,也能實現多態?
virtual修飾符會被隱形繼承的。private 也被集成,只事派生類沒有訪問權限而已。virtual可加可不加。子類的空間里有父類的所有變量(static除外)。同一個函數只存在一個實體(inline除外)。子類覆蓋它的函數不加virtual ,也能實現多態。在子類的空間里,有父類的私有變量。私有變量不能直接訪問。
--------------------------------------------------------------------------
2.輸入一個字符串,將其逆序后輸出。(使用C++,不建議用偽碼)
#include
using namespace std;
void main()
{
char a[50];memset(a,0,sizeof(a));
int i=0,j;
char t;
cin.getline(a,50,'\n');
for(i=0,j=strlen(a)-1;i<strlen(a) p="" 2;i++,j--)<="">
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
cout<<a<<endl;< p="">
}
//第二種
string str;
cin>>str;
str.replace;
cout<<str;< p="">
--------------------------------------------------------------------------
3.請簡單描述Windows內存管理的方法。
內存管理是操作系統中的重要部分,兩三句話恐怕誰也說不清楚吧~~
我先說個大概,希望能夠拋磚引玉吧
當程序運行時需要從內存中讀出這段程序的代碼。代碼的位置必須在物理內存中才能被運行,由于現在的操作系統中有非常多的程序運行著,內存中不能夠完全放下,所以引出了虛擬內存的概念。把哪些不常用的程序片斷就放入虛擬內存,當需要用到它的時候在load入主存(物理內存)中。這個就是內存管理所要做的事。內存管理還有另外一件事需要做:計算程序片段在主存中的物理位置,以便CPU調度。
內存管理有塊式管理,頁式管理,段式和段頁式管理。現在常用段頁式管理
塊式管理:把主存分為一大塊、一大塊的,當所需的程序片斷不在主存時就分配一塊主存空間,把程 序片斷load入主存,就算所需的程序片度只有幾個字節也只能把這一塊分配給它。這樣會造成很大的浪費,平均浪費了50%的內存空間,但時易于管理。
頁式管理:把主存分為一頁一頁的,每一頁的空間要比一塊一塊的空間小很多,顯然這種方法的空間利用率要比塊式管理高很多。
段式管理:把主存分為一段一段的,每一段的空間又要比一頁一頁的空間小很多,這種方法在空間利用率上又比頁式管理高很多,但是也有另外一個缺點。一個程序片斷可能會被分為幾十段,這樣很多時間就會被浪費在計算每一段的物理地址上(計算機最耗時間的大家都知道是I/O吧)。
段頁式管理:結合了段式管理和頁式管理的優點。把主存分為若干頁,每一頁又分為若干段。好處就很明顯,不用我多說了吧。
各種內存管理都有它自己的方法來計算出程序片斷在主存中的物理地址,其實都很相似。
這只是一個大概而已,不足以說明內存管理的皮毛。無論哪一本操作系統書上都有詳細的講解
--------------------------------------------------------------------------
4.
#include "stdafx.h"
#define SQR(X) X*X
int main(int argc, char* argv[])
{
int a = 10;
int k = 2;
int m = 1;
a /= SQR(k+m)/SQR(k+m);
printf("%d\n",a);
return 0;
}
這道題目的結果是什么啊?
define 只是定義而已,在編擇時只是簡單代換X*X而已,并不經過算術法則的
a /= (k+m)*(k+m)/(k+m)*(k+m);
=>a /= (k+m)*1*(k+m);
=>a = a/9;
=>a = 1;
PS:經過本人驗證,雖然結果一樣,但是應該不是這樣運算的,應該是a/=k+m*k+m/k+m*k+m;
因為SQR(k+m)/SQR(k+m)的值是7,而不是9。
--------------------------------------------------------------------------
5.
const 符號常量;
(1)const char *p
(2)char const *p
(3)char * const p
說明上面三種描述的區別;
如果const位于星號的左側,則const就是用來修飾指針所指向的變量,即指針指向為常量;
如果const位于星號的右側,const就是修飾指針本身,即指針本身是常量。
(1)const char *p
一個指向char類型的const對象指針,p不是常量,我們可以修改p的值,使其指向不同的char,但是不能改變它指向非char對象,如:
const char *p;
char c1='a';
char c2='b';
p=&c1;//ok
p=&c2;//ok
*p=c1;//error
(2)char const *p
(3)char * const p
這兩個好象是一樣的,此時*p可以修改,而p不能修改。
(4)const char * const p
這種是地址及指向對象都不能修改。
--------------------------------------------------------------------------
6.下面是C語言中兩種if語句判斷方式。請問哪種寫法更好?為什么?
int n;
if (n == 10) // 第一種判斷方式
if (10 == n) // 第二種判斷方式
如果少了個=號,編譯時就會報錯,減少了出錯的可能行,可以檢測出是否少了=
--------------------------------------------------------------------------
7.下面的代碼有什么問題?
void DoSomeThing(...)
{
char* p;
...
p = malloc(1024); // 分配1K的空間
if (NULL == p)
return;
...
p = realloc(p, 2048); // 空間不夠,重新分配到2K
if (NULL == p)
return;
...
}
A:
p = malloc(1024); 應該寫成: p = (char *) malloc(1024);
沒有釋放p的空間,造成內存泄漏。
--------------------------------------------------------------------------
8.下面的代碼有什么問題?并請給出正確的寫法。
void DoSomeThing(char* p)
{
char str[16];
int n;
assert(NULL != p);
sscanf(p, "%s%d", str, n);
if (0 == strcmp(str, "something"))
{
...
}
}
A:
sscanf(p, "%s%d", str, n); 這句該寫成: sscanf(p, "%s%d", str, &n);
--------------------------------------------------------------------------
9.下面代碼有什么錯誤?
Void test1()
{
char string[10];
char *str1="0123456789";
strcpy(string, str1);
}
數組越界
--------------------------------------------------------------------------
10.下面代碼有什么問題?
Void test2()
{
char string[10], str1[10];
for(i=0; i<10;i++)
{
str1[i] ='a';
}
strcpy(string, str1);
}
數組越界
--------------------------------------------------------------------------
11.下面代碼有什么問題?
Void test3(char* str1)
{
char string[10];
if(strlen(str1)<=10)
{
strcpy(string, str1);
}
}
==數組越界
==strcpy拷貝的結束標志是查找字符串中的\0 因此如果字符串中沒有遇到\0的話 會一直復制,直到遇到\0,上面的123都因此產生越界的情況
建議使用 strncpy 和 memcpy
--------------------------------------------------------------------------
12.下面代碼有什么問題?
#define MAX_SRM 256
DSN get_SRM_no()
{
static int SRM_no; //是不是這里沒賦初值?
int I;
for(I=0;I<max_srm;i++,srm_no++)< p="">
{
SRM_no %= MAX_SRM;
if(MY_SRM.state==IDLE)
{
break;
}
}
if(I>=MAX_SRM)
return (NULL_SRM);
else
return SRM_no;
}
系統會初始化static int變量為0,但該值會一直保存,所謂的不可重入...
--------------------------------------------------------------------------
13.寫出運行結果:
{// test1
char str[] = "world"; cout << sizeof(str) << ": ";
char *p = str; cout << sizeof(p) << ": ";
char i = 10; cout << sizeof(i) << ": ";
void *pp = malloc(10); cout << sizeof(p) << endl;
}
6:4:1:4
--------------------------------------------------------------------------
14.寫出運行結果:
{// test2
union V {
struct X {
unsigned char s1:2;
unsigned char s2:3;
unsigned char s3:3;
} x;
unsigned char c;
} v;
v.c = 100;
printf("%d", v.x.s3);
}
3
--------------------------------------------------------------------------
15.用C++寫個程序,如何判斷一個操作系統是16位還是32位的?不能用sizeof()函數
A1:
16位的系統下,
int i = 65536;
cout << i; // 輸出0;
int i = 65535;
cout << i; // 輸出-1;
32位的系統下,
int i = 65536;
cout << i; // 輸出65536;
int i = 65535;
cout << i; // 輸出65535;
A2:
int a = ~0;
if( a>65536 )
{
cout<<"32 bit"<<endl;< p="">
}
else
{
cout<<"16 bit"<<endl;< p="">
}
--------------------------------------------------------------------------
16.C和C++有什么不同?
從機制上:c是面向過程的(但c也可以編寫面向對象的程序);c++是面向對象的,提供了類。但是,
c++編寫面向對象的程序比c容易
從適用的方向:c適合要求代碼體積小的,效率高的場合,如嵌入式;c++適合更上層的,復雜的; llinux核心大部分是c寫的,因為它是系統軟件,效率要求極高。
從名稱上也可以看出,c++比c多了+,說明c++是c的超集;那為什么不叫c+而叫c++呢,是因為c++比
c來說擴充的東西太多了,所以就在c后面放上兩個+;于是就成了c++
C語言是結構化編程語言,C++是面向對象編程語言。
C++側重于對象而不是過程,側重于類的設計而不是邏輯的設計。
--------------------------------------------------------------------------
17.在不用第三方參數的情況下,交換兩個參數的值
#include
void main()
{
int i=60;
int j=50;
i=i+j;
j=i-j;
i=i-j;
printf("i=%d\n",i);
printf("j=%d\n",j);
}
方法二:
i^=j;
j^=i;
i^=j;
方法三:
// 用加減實現,而且不會溢出
a = a+b-(b=a)
--------------------------------------------------------------------------
18.有關位域的面試題(為什么輸出的是一個奇怪的字符)
a.t = 'b';效果相當于 a.t= 'b' & 0xf;
'b' --> 01100010
'b' & 0xf -->>00000010
所以輸出Ascii碼為2的特殊字符
char t:4;就是4bit的字符變量,同樣
unsigned short i:8;就是8bit的無符號短整形變量
【c++程序員面試題目】相關文章:
C++工程師筆試題目11-25
C++程序員求職信11-21
C++程序員求職信范文11-21
電話面試 題目11-20
海信面試英語題目06-15
寶潔面試題目09-30
面試的測試智力的常規題目!11-20
517昆明CD面試 面試題目11-20
小升初面試筆試及面試題目11-21
嘉士伯電話面試 面試題目分享11-21