C++筆試題(三)

普天是南京一家通訊公司,全稱爲:南京普天通訊股份有限公司,公司網址爲:http://www.postel.com.cn 網上流傳一套普天C++筆試題,我將我作的答案公佈與此,僅供參考。

1.實現雙向鏈表刪除一個節點P,在節點P後插入一個節點,寫出這兩個函數;
答:
//假設線性表的雙向鏈表存儲結構
typedef struct DulNode{
struct DulNode *prior; //前驅指針
ElemType data; //數據
struct DulNode *next; //後繼指針
}DulNode,*DuLinkList;
//刪除操做
Status ListDelete_DuL(DuLinkList &L,int i,ElemType &e)
{
if(!(p=GetElemP_DuL(L,i))) //此處獲得i位置的節點指針,若是有須要也得寫出具體函數實現
return ERROR;
e=p->data;
p->prior->next=p->next;
p->next->prior=p->pror;
free(p);
return OK;
}
//插入操做
Status ListInsert_DuL(DuLinkList &L,int i,ElemType &e)
{
if(!(p=GetElemP_DuL(L,i)))
return ERROR;
if(!(s=(DuLinkList)malloc(sizeof(DuLNode))))
return ERROR;

s->data=e;
s->prior=p->prior;
p->prior->next=s;
s->next=p;
p->prior=s;
return OK;
}
2.寫一個函數,將其中的\t都轉換成4個空格。
答:
該函數命名爲convert,參數的意義爲:
*strDest目的字符串,*strSrc源字符串,length源字符串的長度
函數實現爲:
char* convert(char *strDest, const char *strSrc,int length)
{
char * cp = strDest;
int i=0;
while(*strSrc && i<length) // 跳出條件
{
if (*strSrc==’\t’) //將\t轉換成4個空格
{
for(int j=0;j<4;j++)
*cp++=’ ‘;
}
else //不然直接拷貝
*cp++=*strSrc;
strSrc++;
i++;
}
return strDest;
}

3.Windows程序的入口是哪裏?寫出Windows消息機制的流程。
答:
Windows程序的入口是WinMain函數
消息機制:系統將會維護一個或多個消息隊列,全部產生的消息都會被放入或是插入隊列中。系統會在隊列中取出每一條消息,根據消息的接收句柄而將該消息發送給擁有該窗口的程序的消息循環。每個運行的程序都有本身的消息循環,在循環中獲得屬於本身的消息並根據接收窗口的句柄調用相應的窗口過程。而在沒有消息時消息循環就將控制權交給系統。
4.如何定義和實現一個類的成員函數爲回調函數?
答:
所謂的回調函數,就是預先在系統的對函數進行註冊,讓系統知道這個函數的存在,之後,當某個事件發生時,再調用這個函數對事件進行響應。
定義一個類的成員函數時在該函數前加CALLBACK即將其定義爲回調函數,函數的實現和普通成員函數沒有區別
5.C++裏面是否是全部的動做都是main()引發的?若是不是,請舉例。
答:不是,好比中斷引發的中斷處理不是直接由main()引發的,而是由外部事件引發的。
6.C++裏面如何聲明const void f(void)函數爲C程序中的庫函數?
答:在該函數前添加extern 「C」聲明
7.下列哪兩個是等同的
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二者是相同的。
總結個技巧:若是const位於星號的左側,則const就是用來修飾指針所指向的變量,即指針指向爲常量;若是const位於星號的右側,const就是修飾指針自己,即指針自己是常量。

8. 內聯函數在編譯時是否作參數類型檢查?
答:作類型檢查,由於內聯函數就是在程序編譯時,編譯器將程序中出現的內聯函數的調用表達式用內聯函數的函數體來代替。c++

相關文章
相關標籤/搜索