1. 變量的聲明與定義有何區別
爲變量分配地址和存儲空間的稱爲定義,不分配地址的稱爲聲明。
2.談談對編程規範的理解或認識
程序的可行性、可讀性、可移植性和可測試性。
3. 寫出bool、int、float、指針變量與"零值“的比較if語句
//bool
if(flag)
{
;
}
else
{
;
}
//int
if(0==flag)
{
;
}
else
{
;
}
//float
const float num=0.000001
if((flag>=-num)&&(flag<=num))
{
;
}
else
{
;
}
//指針
if(NULL==flag)
{
;
}
else
{
;
}
4.
<pre name="code" class="cpp">int _tmain(int argc, _TCHAR* argv[])
{
int a=10;
int b=3;
for(int i=0;a<9;i++,b++)
{
a--;
b+=5;
}
printf("%d,%d,%d",b,a+b++,a++);
return 0;
}
for循環,當不滿足循環條件,不會執行循環體,也不會執行for的第三部分(i++,b++)。
printf函數執行順序是從右向左。
則最終輸出結果爲: 4,14,10
5. &&和&,||和|的區別
&位與,|位或都是對操作數進行求值運算,&&和||只是判斷邏輯關係
&&和||在判斷左側操作數就能確定結果下,將不會判斷右側操作數
6. 左值和右值的含義
右值: 存儲在某地址中的數值。
左值: 存儲數值的那塊內存地址。
7. sizeof和strlen有何區別
sizeof爲操作符,strlen爲庫函數;
sizeof的參數可以爲數據類型,也可以是變量,而strlen的參數只能是以'\0'結尾的字符串;
sizeof計算的是數據類型或數據所佔內存大小,而strlen計算的字符串長度; sizeof在編譯階段就計算出結果,而strlen函數需要在運行時才能計算結果;
數組名做sizeof參數時的參數不退化,而作爲strlen函數參數時就退化爲指針。
int _tmain(int argc, _TCHAR* argv[])
{
char *s="abcdefg";
char str[10]="abcd";
cout<<sizeof(s)<<" "<<strlen(s)<<endl;
cout<<sizeof(str)<<" "<<strlen(str)<<endl;
return 0;
}
運行結果爲:
4 7
10 4
8. 數組類型、結構類型和聯合類型都屬於構造數據類型。
9. C語言中的結構體和C++中的類的區別
C語言中的結構體是不能有函數成員的,而C++的類是有的;
C語言結構體中數據成員沒有private、public和protected訪問限定,而C++中的類成員是有這些訪問限定的;
C語言中結構體沒有繼承關係的,而C++中的類有豐富的繼承關係。
10. C中malloc、free和C++中的new、delete有何區別
malloc、free是函數,在C和C++中都可以使用;
new、delete是操作符, 只能在C++中使用;
new創建對象時可以調用對象的構造函數,delete刪除對象時可以調用對象的析構函數;
malloc 僅僅分配內存,free僅僅回收內存,並不執行構造和析構函數;
new和delete返回的是某種數據類型的指針,而maolloc和free返回的是void指針。
11. 引用和指針有何區別?
引用必須初始化,但不分配內存空間; 指針不聲明時初始化,在初始化時需要分配內存空間;
引用初始化以後不能改變,指針可以改變所指的對象;
不存在指向空值的引用,存在指向空值的指針。
12. 簡述#ifdef、#else、#endif和#ifndef的作用
#ifdef、#endif 可以將某程序功能模塊包括進去,以向特定用戶提供該功能;
在子程序前加上標記,便於追蹤和調試;
對硬件的限制。
13. 宏定義和函數的區別
宏的引用只佔編譯時間,不佔用運行時間;
宏定義沒有返回值;
宏定義的形參沒有類型,函數的形參必須要有類型;
實參爲表達式的情況,如果不給表達式加上括號,可能會得出錯誤的結果;而函數不會。
宏直接替代可能會導致副作用,函數不會。
#define DIVDEF(a,b) (a/b)
float Div(float a,float b)
{
return a/b;
}
int _tmain(int argc, _TCHAR* argv[])
{
float x=4,y=2;
cout<<DIVDEF(x+y,x-y)<<endl;
cout<<Div(x+y,x-y)<<endl;
return 0;
}
上述代碼運行結果爲:
2.5
3.0
14. 寫一個“標準” 宏min
#define min(a,b) ((a)<=(b)?(a):(b))
對錶達加括號,防止13中程序出現的錯誤。
宏定義的副作用,如:
((++*p)<=(x)?(++*p):(x)) p指針加了2次,顯然不符。
15. typedef和define的區別
用法不同: typedef 主要用來定義數據類型的別名,而define主要定義常量,以及書寫複雜、頻繁的宏。
執行時間不同: typedef 是編譯過程的一部分,有類型檢查的功能;而宏定義是預編譯的一部分,只是進行簡單的字符串的替換,不進行類型的檢查。
作用域不同: typedef有限定作用域,而define不受作用域約束。
對指針的操作不同: typedef和define定義的指針有很大的區別。
16. #define CHAR char* 和typedef char* CHAR 的作用是否相同?各有什麼優劣?
#define 定義的類型別名代表指針時,可以被其他修飾符擴展(如:unsigned) ,而typedef不可以。
#define 定義的類型別名代表指針時,連續聲明幾個變量中,只有第一個是指針,其他的均爲非指針的普通變量;而typedef能夠保證連續聲明的變量均爲同一類型。
參考文獻: 《c/c++ 程序員面試指南》楊國祥等編著 電子工業出版社