筆試
可以參考:https://www.cnblogs.com/wft1990/p/6545446.html
以下僅是回憶起的題目
1 回答下面的問題(6分)
(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);
}
請問運行Test 函數會有什么樣的結果?
答:輸出“hello”
(2). void Test(void){
char *str = (char *) malloc(100);
strcpy(str, “hello”);
free(str);
if(str != NULL){
strcpy(str, “world”);
printf(str);
}
}
請問運行Test 函數會有什么樣的結果?
答:輸出“world”。
這里仔細理解下free的意義,free函數只是釋放指針指向的內容,而該指針仍然指向原來指向的地方(str != NULL),
此時,指針為野指針,如果此時操作該指針會導致不可預期的錯誤。安全做法是:在使用free函數釋放指針指向的空間之后,將指針的值置為NULL。
(3). char *GetMemory(void){
char p[] = "hello world";
return p;
}
void Test(void){
char *str = NULL;
str = GetMemory();
printf(str);
}
請問運行Test 函數會有什么樣的結果?
答:無效的指針,輸出不確定
2 編寫strcat函數(6分)
已知strcat函數的原型是char *strcat (char *strDest, const char *strSrc);
其中strDest 是目的字符串,strSrc 是源字符串。
(1)不調用C++/C 的字符串庫函數,請編寫函數 strcat
答:
VC源碼:
char * __cdecl strcat (char * dst, const char * src)
{
char * cp = dst;
while( *cp )
cp++; /* find end of dst */
while( *cp++ = *src++ ) ; /* Copy src to end of dst */
return( dst ); /* return dst */
}
(2)strcat能把strSrc 的內容連接到strDest,為什么還要char * 類型的返回值?
答:方便賦值給其他變量
參考:https://www.cnblogs.com/zkfopen/p/11059521.html
3 int i=10, j=10, k=3; k*=i+j; k最后的值是?
答:60,此題考察優先級,實際寫成: k*=(i+j);,賦值運算符優先級最低
4 寫出float x 與“零值”比較的if語句。
答:if(x>-0.000001 & x<0.000001)
printf("x 是零\n");
5 堆棧溢出一般是由什么原因導致的?
答:沒有回收垃圾資源。
6 多態的作用
答:1 不必編寫每一子類的功能調用,可以直接把不同子類當父類看,屏蔽子類間的差異,提高代碼的通用率/復用率 。
2 父類引用可以調用不同子類的功能,提高了代碼的擴充性和可維護性。
7 進程通信方法及線程同步機制區別
答:參考:https://blog.csdn.net/eulb/article/details/2177500
8 為什么構造函數沒有返回值?構造函數失敗怎么處理?
答:https://blog.csdn.net/tangaowen/article/details/1818819
https://blog.csdn.net/wind19/article/details/8213114
9 數字字符串轉換成這個字符串對應的數字(十六進制)
要求:這個字符串參數必須包含一個或者多個數字,函數應該把這些數字轉換為整數並且返回這個整數。如果字符串參數包含任何非數字字符,函數就返回零。不必擔心算數溢出。
答:https://www.cnblogs.com/zkfopen/p/11060685.html
面試
1 虛函數的作用,虛函數的實現原理
答:https://www.cnblogs.com/zkfopen/p/11061414.html
2 什么是野指針?野指針的危害?如何避免野指針?
答:野指針是隨機指向一塊內存的指針,野指針不是NULL指針。
野指針可能會造成內存泄露的危害。(注意:野指針不會一定造成內存泄露,如果該野指針指向的內存剛好是某個變量的地址,那么野指針也能使用這塊內存)。
我們要在以后養成良好的編碼習慣:
1.將沒有指向的指針初始化指向NULL(指向NULL的指針不能對他的指向進行修改)
2.當想給一個指針指向的空間賦值時,一定要給這個指針分配空間(malloc)
3.當空間分配完后,要檢查這個指針的空間是否分配成功
4.當空間分配完后,要先將這塊內存初始化(memset,bzeor)
5.當這塊內存使用完后,必須將這塊內存釋放(free)
6.釋放完空間后,將指針再次指向NULL(防止這個指針再次成為野指針)
3 對代碼規范的理解
答: