1. 程式人生 > >C++ 面試基礎

C++ 面試基礎

bug logs ase 臨時變量 define 靜態變量 析構函數 http another

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

成立? abc 存儲在常量區域,大多數編譯器都會把相同的常量只保持1份拷貝,所以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++ 面試基礎