- 相關(guān)推薦
IT公司筆試面試題系列(七)
IT公司筆試面試題系列(七)
1.Windows程序的入口是哪里?寫(xiě)出Windows消息機制的流程。
Windows程序的入口是WinMain函數.消息機制:系統將會(huì )維護一個(gè)或多個(gè)消息隊列,所有產(chǎn)生的消息都會(huì )被放入或是插入隊列中。系統會(huì )在隊列中取出每一條消息,根據消息的接收句柄而將該消息發(fā)送給擁有該窗口的程序的消息循環(huán)。每一個(gè)運行的程序都有自己的消息循環(huán),在循環(huán)中得到屬于自己的消息并根據接收窗口的句柄調用相應的窗口過(guò)程。而在沒(méi)有消息時(shí)消息循環(huán)就將控制權交給系統。
2.如何定義和實(shí)現一個(gè)類(lèi)的成員函數為回調函數?
所謂的回調函數,就是預先在系統的對函數進(jìn)行注冊,讓系統知道這個(gè)函數的存在,以后,當某個(gè)事件發(fā)生時(shí),再調用這個(gè)函數對事件進(jìn)行響應。
定義一個(gè)類(lèi)的成員函數時(shí)在該函數前加CALLBACK即將其定義為回調函數,函數的實(shí)現和普通成員函數沒(méi)有區別。
3.C++里面是不是所有的動(dòng)作都是main()引起的?如果不是,請舉例。
不是,比如中斷引起的中斷處理不是直接由main()引起的,而是由外部事件引起的。
在運行c++程序時(shí),通常從main()函數開(kāi)始執行。因此如果沒(méi)有main(),程序將不完整,編譯器將指出未定義main()函數。
例外情況:如, 在windows編程中,可以編寫(xiě)一個(gè)動(dòng)態(tài)連接庫(dll)模塊,這是其他windows程序可以使用的代碼。由于DLL模塊不是獨立的程序,因此不需要main().用于專(zhuān)用環(huán)境的程序--如機器人中的控制器芯片--可能不需要main().但常規的獨立程序都需要main().
比如全局變量的初始化,就不是由main函數引起的.但是這個(gè)初始化動(dòng)作并不能為編譯器的斷點(diǎn)所截斷。
4.C++里面如何聲明const void f(void)函數為C程序中的庫函數?
在該函數前添加extern “C”聲明。
5.下列哪兩個(gè)是等同的
int b;
A const int* a = &b;
B const* int a = &b;
C const int* const a = &b;
D int const* const a = &b;
各式表示的意思分別為:
A const int* a = &b; //*a是const,但指針a可變
B const* int a = &b; //a是const,但*a可變
C const int* const a = &b; //a和*a都是const,常量和指針的值都不能改變
D int const* const a = &b; //a和*a都是const,常量和指針的值都不能改變
因此C,D兩者是相同的。
總結個(gè)技巧:如果const位于星號的左側,則const就是用來(lái)修飾指針所指向的變量,即指針指向為常量;如果const位于星號的右側,const就是修飾指針本身,即指針本身是常量。
6.內聯(lián)函數在編譯時(shí)是否做參數類(lèi)型檢查?
做類(lèi)型檢查,因為內聯(lián)函數就是在程序編譯時(shí),編譯器將程序中出現的內聯(lián)函數的調用表達式用內聯(lián)函數的函數體來(lái)代替。
void g(base & b){
b.play;
}
void main(){
son s;
g(s);
return;
}
7.寫(xiě)出判斷ABCD四個(gè)表達式的是否正確, 若正確, 寫(xiě)出經(jīng)過(guò)表達式中 a的值
int a = 4;
(A)a += (a++); (B) a += (++a) ;(C) (a++) += a;(D) (++a) += (a++);
a = ?
答:C錯誤,左側不是一個(gè)有效變量,不能賦值,可改為(++a) += a;
改后答案依次為9,10,10,11
8.某32位系統下, C++程序,請計算sizeof 的值
char str[] = “www.ibegroup.com”
char *p = str ;
int n = 10;
請計算
sizeof (str ) = ?(1)
sizeof ( p ) = ?(2)
sizeof ( n ) = ?(3)
void Foo ( char str[100]){
請計算
sizeof( str ) = ?(4)
}
void *p = malloc( 100 );
請計算
sizeof ( p ) = ?(5)
答:(1)17 (2)4 (3) 4 (4)4 (5)4
9. 回答下面的問(wèn)題
(1).頭文件中的 ifndef/define/endif 干什么用?預處理
答:防止頭文件被重復引用
(2). #include 和 #include “filename.h” 有什么區別?
答:前者用來(lái)包含開(kāi)發(fā)環(huán)境提供的庫頭文件,后者用來(lái)包含自己編寫(xiě)的頭文件。
(3).在C++ 程序中調用被 C 編譯器編譯后的函數,為什么要加 extern “C”聲明?
答:函數和變量被C++編譯后在符號庫中的名字與C語(yǔ)言的不同,被extern "C"修飾的變量和函數是按照C語(yǔ)言方式編譯和連接的。由于編譯后的名字不同,C++程序不能直接調用C 函數。C++提供了一個(gè)C 連接交換指定符號extern“C”來(lái)解決這個(gè)問(wèn)題。
(4). switch()中不允許的數據類(lèi)型是?
答:實(shí)型
10. 回答下面的問(wèn)題
(1).Void GetMemory(char **p, int num){
*p = (char *)malloc(num);
}
void Test(void){
char *str = NULL;
GetMemory(&str, 100);
strcpy(str, "hello");
printf(str);
}
請問(wèn)運行Test 函數會(huì )有什么樣的結果?
答:輸出“hello”
(2). void Test(void){
char *str = (char *) malloc(100);
strcpy(str, “hello”);
free(str);
if(str != NULL){
strcpy(str, “world”);
printf(str);
}
}
請問(wèn)運行Test 函數會(huì )有什么樣的結果?
答:輸出“world”
(3). char *GetMemory(void){
char p[] = "hello world";
return p;
}
void Test(void){
char *str = NULL;
str = GetMemory();
printf(str);
}
請問(wèn)運行Test 函數會(huì )有什么樣的結果?
答:無(wú)效的指針,輸出不確定。
【IT公司筆試面試題系列七】相關(guān)文章:
IT公司筆試面試題系列07-12
華為硬件筆試、面試題07-11
華為C/C++筆試題系列二07-11
公司招聘筆試題目有哪些07-10
寶馬公司面試題07-11
世界最佳公司面試題07-11