C++ 面試基礎
1.Static
Staic特點:只初始化一次,存在靜態區,區別於Auto 變量,存在於棧中(函數結束,也就銷毀)。
類內的staic:靜態數據成員必須在類外初始化,靜態成員函數只能調用靜態變量,兩者都不能用this指針調用。
2.Const
const int *a== int const* a a可變,a指向的對象不可變
int* const a : a不可變,指向對象可變
3.Switch
switch 的break 如果不寫,就會在滿足改條件的語句一直執行,直到break,或者函數結束;
4.為什麽:
char str1*=“abc”;
char str*2=“abc”;
str1==str2
5.Assert
Assert和assert的區別:前者在Debug版本中有,在Relase 版本不存在,而assert 都會存在;
#define NDEBUG 可以禁止調用宏;
6.enum
enum(a,b=1,c,d=2,e) == 0,1,2,2,3
7.argc和argv[]
(Test.c)int main (int argc,int*argv[]){.....}
命令行輸入: Hong bi yue I
argv[]=[Test, Hong,bi,yue,I ];
argc=5;
8.main 函數結束後
main 函數結束後,如果還想繼續執行代碼,可以再析構函數裏面執行
9.++
a.
*p++ : *p -> p++ 地址加;
(*p)++ : (*p)++ 值加;
b.
s++=5 :錯誤,先執行取a的地址,裝入寄存器,然後臨時變量為a的值加1,程序不允許對臨時變量賦值;
++s=5 :正確,取a地址,內容+1,放入寄存器;
10.浮點數的註意事項:
float a,b,c;
1.if(a==0): 浮點數存在精度問題,不是一個確切的值,需要轉化為:>= 或者<=;
2. a+b=b+a;
(a+b)+c 不一定等於 :(a+c)+b 浮點運算是不能被結合的 ------------???不懂
11.String 類實現註意點:
1.String :: String(const String &another)
{
char* m_data; //以調用strcpy()函數,故用指針
m_data= new char[strlen(another.m_data)+1]
strcpy (m.data,another.m_data);
}
12.extern 和 export
註:頭文件中一般不定義變量,會引起重復定義,即使用 #ifdef,雖然頭文件只被編譯了一次,但是變量不只是會定義一次;
extren int n;
export template<class T> void f(T& t);
13 內存分配
(1)符號起始區塊(BSS) :靜態數據+ 未初始化的全局數據
(2)數據段: 靜態內存分配,已初始化的全局數據
(3)代碼段:程序執行代碼
(4)堆 :動態分配的內存:malloc 和 new
(5)棧 :臨時創建的局部變量
C++ 面試基礎