

下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、1.const 符號常量:(1)、 const char *p(2)、 char const *p(3)、 char * const p如果 const 位于星號的左側(cè),則 const 就是用來修飾指針所指向的變量,即指針指向為 常量。如果 const 位于星號的右側(cè), const 就是修飾指針本身,即指針本身是常量。2.析構(gòu)函數(shù)和虛函數(shù)的用法和作用? 析構(gòu)函數(shù)的作用是當對象生命期結(jié)束時釋放對象所占用的資源。析構(gòu)函數(shù)用法:析構(gòu)函 數(shù)是特殊的類成員函數(shù) 它的名字和類名相同,沒有返回值,沒有參數(shù)不能隨意調(diào)用也沒有重載。只是在類對象 生命期結(jié)束時有系統(tǒng)自動調(diào)用。虛函數(shù)用在繼承中, 當在派生類中需要重
2、新定義基類的函數(shù)時需要在基類中將該函數(shù)聲 明為虛函數(shù),作用為使程序支持動態(tài)聯(lián)遍。3.堆和棧的區(qū)別棧(stack):由編譯器自動分配釋放,存放函數(shù)的參數(shù)值,局部變量的值等。其操作方 式類似于數(shù)據(jù)結(jié)構(gòu)中的棧。堆:一般由程序員分配釋放,若不釋放,程序結(jié)束時可能由OS 回收。注意它與數(shù)據(jù)結(jié)構(gòu)中的堆是兩回事,分配方式類似。4.頭文件的作用是什么?一、通過頭文件來調(diào)用庫功能。在很多場合,源代碼不便(或不準)向用戶公布,只要 向用戶提供頭文件和二進制的庫即可。 用戶只需要按照頭文件中的接口聲明來調(diào)用 庫功能,而不必關(guān)心接口怎么實現(xiàn)的。編譯器會從庫中提取出相應的代碼。二、 頭文件能加強類型安全檢查。如果某個接
3、口被實現(xiàn)或被使用時,其方式與頭文件中的聲明不一致,編譯器就會指出錯誤,這一簡單的規(guī)則能大大減輕程序員調(diào)試、改 錯的負擔。5.內(nèi)存的分配方式有幾種?一、從靜態(tài)存儲區(qū)域分配。 內(nèi)存在程序編譯的時候已經(jīng)分配好, 這塊內(nèi)存在程序的整個 運行期間都存在。如全局變量。二、在棧上創(chuàng)建。 在執(zhí)行函數(shù)時, 函數(shù)內(nèi)局部變量的存儲單元都可以在棧上創(chuàng)建, 函數(shù) 執(zhí)行結(jié)束時這些存儲單元自動被釋放。棧內(nèi)存分配運算內(nèi)置于處理器的指令集中, 效率高,但是分配的內(nèi)存容量有限。三、從堆上分配,亦稱動態(tài)內(nèi)存分配。程序在運行的時候用 malloc 或 new 申請任意多 少的內(nèi)存,程序員自己負責在何時用 free 或 delete
4、釋放內(nèi)存。 動態(tài)內(nèi)存的生存期由 我們決定,使用非常靈活。6.BOOL、float、指針變量與“零值比較的if 語句”。BOOL:lf(flag)或 if(!flag)Float:const float EPSINON = 0.00001; lf(x=.EPSINON)&(x=”或“ =”此類形式。指針 *p : if(p=NULL) if(p!=NULL)7.以下為 Windows NT 下的 32 位 C+程序,請計算 sizeof 的值Char str = “Hello”;Char *p = str;Int n = 10 請計算: Sizeof(str) = 6 Sizeof(p)
5、 = 4 Sizeof(n)=2Void Func(char str100)請計算: sizeof(str) = 4Void *p = malloc(100)請計算: sizeof(p) = 48.#include 和 #include “filename.h ”有什么區(qū)別對于 #include ,編譯器從標準庫路徑開始搜索 filename.h ,對于 #include“filename.h ”,編譯器從用戶的工作路徑中開始搜索filename.h9.Const 有什么用途1.可以定義 const 常量2.Const 可以修飾函數(shù)的參數(shù)、返回值,甚至函數(shù)的定義體。被const 修飾的東西都受
6、到強制保護,可以預防意外的變動,能提高程序的健壯性。10. 在 C+程序中調(diào)用被 C 編譯器編譯后的函數(shù),為什么要加extern C”C+語言支持函數(shù)重載,C 語言不支持函數(shù)重載。函數(shù)被 C+編譯后在庫中的名字與C 語言的不同。假設某個函數(shù)的原型為: void fee(int x,inty);該函數(shù)被 C 編譯器編譯后在庫中的名字為_foo,而 C+編譯器則會產(chǎn)生像_foo_int_int 之類的名字。C+提供了 C 連接交換指定符號 extern C”來解決名字匹配的問題。11. 內(nèi)存思考題Void GetMemory(char *p)P = (char *)malloc(100);Void
7、 Test(void)Char *str = NULL;GetMemory(str);Strcpy(str,”hello world ”);Printf(str);請問運行 Test 函數(shù)會有什么樣的結(jié)果?程序會崩潰,因為 GetMemory 并不能傳遞動態(tài)內(nèi)存,Test 函數(shù)中的 str 一直是 NULL。Strycpy(str,”hello world ”);將使程序崩潰。Char *GetMemory(void)Char p = “hello world ”;Return p;Void Test(void)Char *str = NULL;Str = GetMemory();Printf
8、(str);請問 Test 函數(shù)會有什么樣的結(jié)果?可以是亂碼。 因為 GetMemory 返回的是指向“棧內(nèi)存”的指針,該指針的地址不是 NULL, 但其原現(xiàn)的內(nèi)容已經(jīng)被清除,新內(nèi)容不知。Void GetMemory2(char *p,int num)*P = (char *)malloc(num);Void Test(void)Char *str = NULL;GetMemory(&str,100);Strcpy(str,”hello ”);Printf(str);請問運行 Test 函數(shù)會有什么樣的結(jié)果?1.能夠輸出 hello2.內(nèi)存泄露Void Test(void)Char *
9、str = (char *) malloc(100);Strcpy(str,”hello ”);Free(str);If(str != NULL)Strcpy(str,”world ”); Printf(str);請問運行 Test 函數(shù)會有什么樣的結(jié)果? 篡改動態(tài)內(nèi)存區(qū)的內(nèi)容,后果難以預料,非常危險。 因為 free(str); 之后, str 成為野指針, if(str!=NULL) 語句不起作用。12. 頭文件的作用是什么? 一、通過頭文件來調(diào)用庫功能。在很多場合,源代碼不便(不準)向用戶公布,只要向 用戶提供頭文件和二進制的庫即可。 用戶只需要按照頭文件中的接口聲明來調(diào)用庫功能,而不必
10、關(guān)心接口怎么實現(xiàn)的。編譯器會從庫中提取相應的代碼。 二、頭文件能加強類型安全檢查。如果某個接口被實現(xiàn)或被使用時,其方式與頭文件中 的聲明不一致,編譯器就會指出錯誤,這一簡單的規(guī)則能減輕程序員調(diào)試、改錯的 負擔。13. C+里面晃是不所有的動作都是main()引起的?如果不是,請舉例在運行 C+程序時,通常從 main()函數(shù)開始執(zhí)行。因此如果沒有 main(),程序?qū)⒉煌暾?編譯器將指出未定義 mai n()函數(shù)。例外情況:如,在 windows 編程中,可以編寫一個動態(tài) 連接庫(DLL)模塊,這是其他 windows程序可以使用的代碼。由于 DLL 模塊不是獨立的程序,因此不需要 main
11、()。用 于專用環(huán)境的程序如機器人中的控制器芯片可能不需要main(),但常規(guī)的獨立程序都需要 main().14. 引用與指針的區(qū)別:1、 引用總是指向某個對象,定義時沒有初始化是錯誤的;2、 給引用賦值是修改引用所關(guān)聯(lián)的對象的值,所關(guān)聯(lián)的對象不變。15. 變量的聲明和定義有什么區(qū)別 從編譯原理上來說,聲明是僅僅告訴編譯器,有個某類型的變量會被使用,但是編譯器 并不會為它分配任何內(nèi)存。而定義就是分配了內(nèi)存。16. Sizeof 和 strlen 區(qū)別1、 Sizeof 操作符的結(jié)果類型是size_t,它在頭文件中 typedef 為 unsigned int 類型。該類 型保證能容納實現(xiàn)所建
12、立的最大對象的字節(jié)大小。2、 Sizeof 是運算符,strlen 是函數(shù)3、 Sizeof 可以用類型做參數(shù),strlen 只能用 char*做參數(shù),且必須是以換行符0”結(jié)尾 的。4、 Strlen 的結(jié)果要在運行的時候才能計算出來,是用來計算字符串的長度,不是類型占 內(nèi)存的大小。5、 數(shù)組做 sizeof 的參數(shù)不退化,傳遞給strlen 就退化為指針;17. C 中 malloc 與 new 的區(qū)別1、 new 是 C+中的操作符, malloc 是 C 中的一個函數(shù);2、 new 不上是分配內(nèi)存,而且會調(diào)用類的構(gòu)造函數(shù),同理 delete 會調(diào)用類析構(gòu)函數(shù), 而 malloc則只分配內(nèi)
13、存,不會進行初始化類成員的工作,同樣 free 也不會調(diào)用析構(gòu) 函數(shù)。3、 內(nèi)存泄露對于 malloc 或者 new 都可以檢查出來的,區(qū)別在于 new 可以指明那個文 件的那一行,而 malloc 沒有這些信息。4、 New 和 malloc 效率比較New 有三個字母, malloc 有六個字母New 可以認為是 malloc 加構(gòu)造函數(shù)的執(zhí)行。New 出來的指針是直接帶類型信息。而 malloc 返回的都是 void 指針。18. 關(guān)鍵字 static 在 C 和 C+沖的區(qū)別1、 在 C 語言中,主要體現(xiàn)在靜態(tài)全局變量、靜態(tài)局部變量和靜態(tài)函數(shù)。2、 在 C+中,主要體現(xiàn)在靜態(tài)數(shù)據(jù)成員和
14、靜態(tài)成員函數(shù)。19. 簡述 #define #endif 和#ifndef 的作用#define 指示接受一個名字并定義該名字為預處理器變量; #ifndef 檢測指定的預處理變量是否定義;#endif 預處理未定義20.實現(xiàn)雙向鏈表刪除一個節(jié)點P,在節(jié)點 P 后插入一個節(jié)點, 寫出這兩個函數(shù)答:雙向鏈表刪除一個節(jié)點PTemplate void list:delnode(int p)int k = 1;listnode *ptr,*t;ptr = first;While(ptr-next!=NULL&k!=p)ptr = ptr-next;k+;t = ptr-next;cout ”你
15、已經(jīng)將數(shù)據(jù)項data刪除next = ptr-next-next;length-; delte t;在節(jié)點 P 后插入一個節(jié)點:Template bool list:insert(type t,int p)Listnode *ptr;Ptr = first;int k = 1;while(ptr != NULL & k next;k+;If(ptr = NULL & k!=p)return false;elseListnode *tp;tp = new listnode;tp-data = t;tp-next = ptr-next;ptr-next = tp;length+;r
16、eturn true;21. sizeof 的使用場合sizeof 操作符一個主要用途是存儲分配和 I/O 系統(tǒng)那樣的例程進行通信??梢圆榭茨撤N 類型的對象在內(nèi)存中所占單位字節(jié);在動態(tài)分配一對象時,可以讓系統(tǒng)指導要分配多少內(nèi)存; 便于一些類型的擴充。22. 以下代碼有什么問題 C+struct TestTest(int);Test();void fun();void main(void)Test a(1);a.fun();Test b();b.fun();Test b();/ 定義了一個函數(shù) b 不是一個類對象。23. 以下代碼有什么問題?Cout (true?1: ”I”endl;1:“1”
17、不是同一類型:前后必須是同一類型 or 能隱式轉(zhuǎn)換的類型24. 以下三條輸出語句分別輸出什么?char str1 = “abc”;char str2 = “abc”;const char str3 = “abc”;const char str4 = “abc”;const char* str5 = “abc”;const char* str6 = “abc”;cout boolalpha (str=str2)endl;cout boollalpha(str3=str4)endl;cout boollalpha(str5=str6)temp;unsigned int const size2 =
18、temp;char str2size2;str2 定義出錯, size2 非編譯器期間常量,而數(shù)組定義要求長度必須編譯期常量。27. 編寫 strcpy 函數(shù)已知 strcpy 函數(shù)的原型是char *strcpy(char *strDest,const char *strSrc);其中 strDest 是目的字符串, strSrc 是源字符串。char *strcpy(char *strDest,const char *strSrc)assert(strDest!=NULL)&(strSrc!=NULL); char *address = strDest;while(*strDest
19、 +=*strSrc+)!= 0 )NULL;return address;strycpy 能把 strSrc 的內(nèi)容復制到 strDest ,為什么還要 char* 類型的返回值? 為了實現(xiàn)鏈式表達式。如: int length = strlen(strcpy(strDest, ”hello world ”);28. 寫出下面這段代碼的輸出#include Int main(void)int a,b,c,d; a = 10; b = a+; c = +a; d = 10 * a+; printf( “b,c,d:%d,%d,%D”,a,b,c); return0;10,12,120;29.
20、編寫類 String 的構(gòu)造函數(shù)、析構(gòu)函數(shù)和賦值函數(shù) class Stringpublic:String(Const char *str = NULL);/ 普通構(gòu)造函數(shù) String(const String &other); / 拷由構(gòu)造函數(shù) String(void); / 析構(gòu)函數(shù)String &operate = (const String &other);/ 賦值函數(shù) private:char *m_data;/ 用于保存字符串;/String 的析構(gòu)函數(shù)String:String(void)delete m_data;/ 由于 m_data 是內(nèi)部數(shù)據(jù)類型,
21、也可以寫成 delete m_data;/String 的普通構(gòu)造函數(shù) String:String(const char *str)If(str = NULL)m_data = new char1;*m_data = 0 ;elseint length = strlen(str); m_data = new charlength + 1; strcpy(m_data,str);/ 拷貝構(gòu)造函數(shù) String:String(const String &other)int length = strlen(other.m_data);m_data = new charlength + 1;
22、strcpy(m_data,other.m_data);/ 賦值函數(shù)String&String:operate=(const String&other)/1. 檢查自賦值If(this = &other)return *this;/2. 釋放原有的內(nèi)存資源Delete m_data;/3. 分配新的內(nèi)存資源,并復制內(nèi)容int length = strlen(other.m_data);m_data = new charlength+1;strcpy(m_data,other.m_data);return *this;30. 全局變量可不可以定義在可被多個.C 文件包含的
23、頭文件中?為什么?可以,在不同的 C 文件中以 static 形式來聲明同名全局變更。可以在不同的C 文件夾中聲明同名的全局變量,前提是其中只能有一個C 文件中對此變量賦初值,此時連接不會出錯。31. 對于一個頻繁使用的短小函數(shù),在C 語言中應用什么實現(xiàn),在C+中應用什么實現(xiàn)?C 用宏定義,C+用 inline32. 指出下面代碼的輸出,并解釋為什么main()int a5 = 1,2,3,4,5;int *ptr = (int *)(&a+1);printf( “%d,%d”,*(a+1),*(ptr-1);輸出: 2, 5*(a+1)就是 a1,*(ptr-1)就是 a4,執(zhí)行結(jié)果
24、是 2,5;&a+1 不是首地址 +1,系統(tǒng)會認為加一個 a 數(shù)組的偏移,是偏移了一個數(shù)組的大小(本 例是 5 個int)int *ptr = (int *)(&a+1); 則 ptr 實際是 &(a5) ,也就是 a+5原因如下:&a 是數(shù)組指針,其類型為 int(*)5;而指針加 1 要根據(jù)指針類型加一定的值,不同類型的指針+1 之后增加的大小不同,a 是長度為 5 的 int 數(shù)組指針,所以要加 5*sizeof(int)所以 ptr 實際是 a5但是 ptr 與(&a+1)類型是不一樣的(這點很重要)所以 ptr-1 只會減去 sizeof(in
25、t*)a,&a 的地址是一樣的,但意思不一樣,a 是數(shù)組首地址,也就是a0的地址,&a 是對象(數(shù)組)首地址, a+1 是數(shù)組下一元素的地址,即 a1, &a+1 是下一個對象的地址,即 a5.33. 以下代碼中的兩個 sizeof 用法有問題嗎?sizeof 如用于數(shù)組,只能測出靜態(tài)數(shù)組的大小,無法檢測動態(tài)分配的或外部數(shù)組大小。注意:數(shù)組名作為函數(shù)參數(shù)時,退化為指針。數(shù)組名作為 sizeof()參數(shù)時,數(shù)組名不退化,因為 sizeof 不是函數(shù)。34. 請問以下代碼有什么問題int main()char a;char *str = &a;strcpy(str,
26、”hello”);printf(str);return 0;沒有為 str 分配內(nèi)存空間,將會發(fā)生異常 問題出在將一個字符串復制進一個字符變量指針所指地址。雖然可以正確輸出結(jié)果,但 因為越界進行內(nèi)在讀寫而導致程序崩潰。Strcpy 的在庫函數(shù) string.h 中,程序的主要程序在于越辦進行內(nèi)存讀寫導致程序崩潰。2.const char* s = “AAA”;Printf( “%s”,s);S0 = B;Printf( “%s”,s);AAA是字符串常量,S 是指針,指向這個字符串常量,所以聲明s 的時候就有問題。Con st char* s =”AAA”,然后又因為是常量,所以對S0的賦值操作是不合法的。35. Char szstr10;Strcpy(szstr,”0123456789 ”); 產(chǎn)生什么結(jié)果?為什么? 正常輸出,長度不
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 投資建住房協(xié)議書
- 媽媽和兒子協(xié)議書
- 美容院顧客套餐協(xié)議書
- 噴繪廠退股協(xié)議書
- 破案獎勵費協(xié)議書
- 彩票點轉(zhuǎn)租協(xié)議書
- 某公司合伙協(xié)議書
- 補修田間路協(xié)議書
- 高嶺土合作協(xié)議書
- 美發(fā)店入股協(xié)議書
- 缽缽雞行業(yè)分析
- 粉塵防爆安全管理制度范文
- PPT失禁性皮炎護理(IAD)
- 柴油安全技術(shù)說明書(MSDS)
- 哺乳期的乳房護理課件
- 華為財務管理(6版)-華為經(jīng)營管理叢書
- 2023年四川省綿陽市中考英語試卷真題(含答案)
- 藥物咨詢記錄
- 【汽車萬向傳動軸的設計5200字(論文)】
- 發(fā)電機組行業(yè)商業(yè)計劃書
- 《公路斜拉橋設計規(guī)范》(JTGT 3365-01-2020)正式版
評論
0/150
提交評論