c malloc 头文件_干货笔记 | C/C++笔试面试详细总结(二)
生活随笔
收集整理的這篇文章主要介紹了
c malloc 头文件_干货笔记 | C/C++笔试面试详细总结(二)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
11、隊列和棧有什么區別?
答:隊列先進先出,棧后進先出。12、不能做 switch()的參數類型是什么?
答 :switch 的參數不能為實型。13、局部變量能否和全局變量重名?
答:能,局部會屏蔽全局,要用全局變量,需要使用”::”。局部變量可以與全局變量同名,在函數內引用這個變量時,會用到同名的局部變量,而不會用到全局變量。對于有些編譯器而言,在同一個函數內可以定義多個同名的局部變量,比如在兩個循環體內都定義一個同名的局部變量,而那個局部變量的作用域就在那個循環體內。14、如何引用一個已經定義過的全局變量?
答 :可以用引用頭文件的方式,也可以用 extern 關鍵字,如果用引用頭文件方式來引用某個在頭文件中聲明的全局變量,假定你將那個變量寫錯了,那么在編譯期間會報錯,如果你用 extern 方式引用時,假定你犯了同樣的錯誤,那么在編譯期間不會報錯,而在連接期間報錯。15、全局變量可不可以定義在可被多個.C 文件包含的頭文件中?為什么?
答:可以,在不同的C 文件中以 static 形式來聲明同名全局變量。可以在不同的 C 文件中聲明同名的全局變量,前提是其中只能有一個 C 文件中對此變量賦初值,此時連接不會出錯。16、語句 for( ;1 ;)有什么問題?它是什么意思?
答:while(1)相同,無限循環。17、do……while 和 while……do 有什么區別?
答:前一個循環一遍再判斷,后一個判斷以后再循環。18、static 全局變量、局部變量、函數與普通全局變量、局部變量、函數static 全局變量與普通的全局變量有什么區別?static 局部變量和普通局部變量有什么區別?static 函數與普通函數有什么區別?
答:全局變量(外部變量)的說明之前再冠以 static 就構成了靜態的全局變量。全局變量本身就是靜態存儲方式,靜態全局變量當然也是靜態存儲方式。這兩者在存儲方式上并無不同。這兩者的區別雖在于非靜態全局變量的作用域是整個源程序, 當一個源程序由多個源文件組成時,非靜態的全局變量在各個源文件中都是有效的。而靜態全局變量則限制了其作用域, 即只在定義該變量的源文件內有效, 在同一源程序的其它源文件中不能使用它。由于靜態全局變量的作用域局限于一個源文件內,只能為該源文件內的函數公用, 因此可以避免在其它源文件中引起錯誤。從以上分析可以看出, 把局部變量改變為靜態變量后是改變了它的存儲方式即改變了它的生存期。==把全局變量改變為靜態變量后是改變了它的作用域, 限制了它的使用范圍。==static函數與普通函數作用域不同。僅在本文件。只在當前源文件中使用的函數應該說明為內部函數(static),內部函數應該在當前源文件中說明和定義。對于可在當前源文件以外使用的函數,應該在一個頭文件中說明,要使用這些函數的源文件要包含這個頭文件。?static 全局變量與普通的全局變量的區別:static 全局變量只初使化一次,防止在其他文件單元中被引用。?static 局部變量和普通局部變量的區別:static 局部變量只被初始化一次,下一次依據上一次結果值。?static 函數與普通函數的區別:static 函數在內存中只有一份,普通函數在每個被調用中維持一份拷貝。操作系統和編譯器通過內存分配的位置來知道的,全局變量分配在全局數據段并且在程序開始運行的時候被加載。局部變量則分配在堆棧里面。19、講述一下程序的內存分配
答:一個由c/C++編譯的程序占用的內存分為以下幾個部分1、棧區(stack)—由編譯器自動分配釋放,存放函數的參數值,局部變量的值等。其操作方式類似于數據結構中的棧。2、堆區(heap)—==一般由程序員分配釋放,若程序員不釋放,程序結束時可能由OS 回收。==注意它與數據結構中的堆是兩回事,分配方式倒是類似于鏈表。3、全局區(靜態區)(static)—全局變量和靜態變量的存儲是放在一塊的,初始化的全局變量和靜態變量在一塊區域,未初始化的全局變量和未初始化的靜態變量在相鄰的另一塊區域。程序結束后由系統釋放。4、文字常量區—常量字符串就是放在這里的。程序結束后由系統釋放。5、程序代碼區—存放函數體的二進制代碼例子程序。參考:20、解釋堆和棧的區別?
答:堆(heap)和棧(stack)的區別(1) 申請方式==stack:由系統自動分配。==例如,聲明在函數中一個局部變量 int b;系統自動在棧中為 b 開辟空間heap:需要程序員自己申請,并指明大小,在 c 中 malloc 函數如 p1=(char*)malloc(10);在 C++中用 new 運算符如 p2=(char*)malloc(10);但是注意 p1、p2本身是在棧中的。(2) 申請后系統的響應棧:只要棧的剩余空間大于所申請空間,系統將為程序提供內存,否則將報異常提示棧溢出。堆:首先應該知道操作系統有一個記錄空閑內存地址的鏈表,當系統收到程序的申請時, 會遍歷該鏈表,尋找第一個空間大于所申請空間的堆結點,然后將該結點從空閑結點鏈表中刪除,并將該結點的空間分配給程序,另外,對于大多數系統,會在這塊內存空間中的首地址處記錄本次分配的大小,這樣,代碼中的 delete 語句才能正確的釋放本內存空間。另外, 由于找到的堆結點的大小不一定正好等于申請的大小,系統會自動的將多余的那部分重新放入空閑鏈表中。(3) 申請大小的限制棧:==在 Windows 下,棧是向低地址擴展的數據結構,是一塊連續的內存的區域。這句話的意思是棧頂的地址和棧的最大容量是系統預先規定好的,在 WINDOWS 下,棧的大小是2M(也有的說是1M,總之是一個編譯時就確定的常數),如果申請的空間超過棧的剩余空間時,將提示 overflow。==因此,能從棧獲得的空間較小。堆:==堆是向高地址擴展的數據結構,是不連續的內存區域。==這是由于系統是用鏈表來存儲的空閑內存地址的,自然是不連續的,而鏈表的遍歷方向是由低地址向高地址。堆的大小受限于計算機系統中有效的虛擬內存。由此可見,堆獲得的空間比較靈活,也比較大。(4) 申請效率的比較:棧:由系統自動分配,速度較快,但程序員是無法控制的。堆:是由new 分配的內存,一般速度比較慢,而且容易產生內存碎片,不過用起來最方便。另外,在 WINDOWS 下,最好的方式是用 Virtual Alloc 分配內存,他不是在堆,也不是在棧,而是直接在進程的地址空間中保留一塊內存,雖然用起來最不方便。但是速度快,也最靈活。(5) 堆和棧中的存儲內容棧:在函數調用時,第一個進棧的是主函數中后的下一條指令(函數調用語句的下一條可執行語句)的地址,然后是函數的各個參數,在大多數的 C 編譯器中,參數是由右往左入棧的,然后是函數中的局部變量,注意靜態變量是不入棧的。當本次函數調用結束后,局部變量先出棧,然后是參數,最后棧頂指針指向最開始存的地址, 也就是主函數中的下一條指令,程序由該點繼續運行。堆:一般是在堆的頭部用一個字節存放堆的大小。堆中的具體內容由程序員安排。(6) 存取效率的比較aaaaaaaaaaa 是在運行時刻賦值的;bbbbbbbbbbb 是在編譯時就確定的;但是,在以后的存取中,==在棧上的數組比指針所指向的字符串(例如:堆)快。==比如:對應的匯編代碼如下:第一種在讀取時直接就把字符串中的元素讀到寄存器 cl 中,而第二種則要先把指針值讀到edx 中,在根據 edx 讀取字符,顯然慢了。▼▼▼
掃碼加華妹~
新班占座/領取資料/最新活動
福利一掃碼免費領Linux視頻資料~
福利二喜訊 | 華清遠見獲批教育部2020年第一批產學合作協同育人項目!
2020-10-20
華清遠見教育部高教司2020第一批“產學合作協同育人”項目申報指南
2020-10-20
華清高校開講座 線下充電真不錯
2020-10-19
1024程序員狂歡節 | 抽萬元錦鯉大禮包(iPhone12、電動平衡車…),還有2重大禮等你來!
2020-10-15
關于華清遠見華清遠見武漢中心位于武漢市洪山區武漢工程大學(武昌校區)科技孵化器11 樓,學生的食宿與活動十分便捷,實驗設備、師資力量、教學管理等方面全國一流。武漢中心擁有專業級講師及資深工程師, 師資力量雄厚;擁有國內最先進的人工智能、云/大數據等開發硬件專業實驗設備,其中85%以上的實驗設備由華清遠見自主研發;擁有以人為本的高級班主任老師,科學的教學管理制度。主要課程有嵌入式人工智能、Java大數據開發、Html5全棧開發、Python+人工智能等,并為每一位學員提供專業的就業指導,高薪就業的學員不計其數,做良心教育,做專業教育,做受人尊敬的職業教育。?微信搜一搜華清遠見武漢中心點分享點點贊點在看總結
以上是生活随笔為你收集整理的c malloc 头文件_干货笔记 | C/C++笔试面试详细总结(二)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 镜头畸变情况
- 下一篇: jsp文件上传_猿蜕变系列7——也说说s