freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

c語言學(xué)習(xí)筆記(必看知識點)(編輯修改稿)

2025-08-31 23:42 本頁面
 

【文章內(nèi)容簡介】 ,也即將在一個文件中引用的符號同該符號在另外一個文件中的定義連接起來,使得所有的這些目標(biāo)文件成為一個能夠誒操作系統(tǒng)裝入執(zhí)行的統(tǒng)一整體。鏈接過程分為靜態(tài)鏈接和動態(tài)鏈接。靜態(tài)鏈接是指連接程序從靜態(tài)鏈接庫中拷貝需要的代碼到被執(zhí)行的程序中,動態(tài)鏈接是指代碼被放到稱作是動態(tài)鏈接庫或共享對象的某個目標(biāo)文件中,鏈接程序此時所作的只是在最終的可執(zhí)行程序中記錄下共享對象的名字以及其它少量的登記信息。在此可執(zhí)行文件被執(zhí)行時,動態(tài)鏈接庫的全部內(nèi)容將被映射到運行時相應(yīng)進(jìn)程的虛地址空間。動態(tài)鏈接程序?qū)⒏鶕?jù)可執(zhí)行程序中記錄的信息找到相應(yīng)的函數(shù)代碼。答:實質(zhì)上,GCC的編譯過程是分為四個階段進(jìn)行的,即預(yù)處理(也稱預(yù)編譯,Preprocessing)、編譯(Compilation)、匯編 (Assembly)和連接(Linking)。一步到位編譯:gcc o 預(yù)處理:gcc E o 或 gcc E 編譯為匯編代碼(Compilation):gcc S o 匯編(Assembly):gcc c o 。連接(Linking):gcc o 47. C語言程序調(diào)試的常見錯誤分析與解決辦法答:,最后在鏈接成可執(zhí)行文件。編譯提示的錯誤:編譯的時候進(jìn)行詞法分析和語法分析,此時書寫不符合語法規(guī)則或者未定義會進(jìn)行報錯,這種錯誤容易處理。鏈接提示的錯誤:,出現(xiàn)重復(fù)編譯。這時候預(yù)處理的條件編譯就發(fā)揮作用了,可以防止重復(fù)編譯。但是,作用只能是防止變量的申明的重復(fù)編譯,而不能防止變量的定義的重復(fù)編譯。也就是說,在頭文件中定義了函數(shù)之后。原因是,我個人理解是,條件編譯之所以對頭文件中定義的函數(shù)不能起到防止重復(fù)編譯的功能,是因為函數(shù)體的實現(xiàn)代碼編譯后最終是要存入obj目標(biāo)文件中的,編譯是 ,,因此其函數(shù)的定義部分,即實現(xiàn)部分一定要編譯成目標(biāo)代 碼存入obj文件,供鏈接時使用。,編譯器沒有規(guī)定將函數(shù)代碼的 ,只能兩個同時包含,這就導(dǎo)致了鏈接時出現(xiàn)的重復(fù)定義的問題。解決的辦法就是不要在頭文件中定義變量,只能申明?;蛘咧荒茏屢?,或者用static來修飾函數(shù),定義為全局靜態(tài)類型函數(shù),這樣的話函數(shù)代碼就會被存到全局/靜態(tài)存儲區(qū),編譯時只會被編譯一次,若非static靜態(tài)全局變量,,而不是整個程序的全局變量,將目標(biāo)代碼存入自己的obj文件中,鏈接時就會出錯。 ++語言中程序在內(nèi)存中的分區(qū)情況答:在C++中,內(nèi)存分成5個區(qū),他們分別是堆、棧、自由存儲區(qū)、全局/靜態(tài)存儲區(qū)和常量存儲區(qū)。 棧區(qū),就是那些由編譯器在需要的時候分配,在不需要的時候自動清除的變量的存儲區(qū)。里面的變量通常是局部變量、函數(shù)參數(shù)等。 堆區(qū),就是那些由new分配的內(nèi)存塊,他們的釋放編譯器不去管,由我們的應(yīng)用程序去控制,一般一個new就要對應(yīng)一個delete。如果程序員沒有釋放掉,那么在程序結(jié)束后,操作系統(tǒng)會自動回收。 程序代碼區(qū)—存放函數(shù)體的二進(jìn)制代碼。 全局/靜態(tài)存儲區(qū),全局變量和靜態(tài)變量被分配到同一塊內(nèi)存中,在以前的C語言中,全局變量又分為初始化的和未初始化的,在C++里面沒有這個區(qū)分了,他們共同占用同一塊內(nèi)存區(qū)。 常量存儲區(qū),這是一塊比較特殊的存儲區(qū),他們里面存放的是常量,不允許修改()不能用來求指針指向的內(nèi)存空間的大小答:*output=(char *)alloca(23*sizeof(char))。sizeof(output)。求得的不是指針output指向的內(nèi)存的地址空間的大小,而是指針變量本身所占的內(nèi)存空間大小,為4個字節(jié)。指針和數(shù)組是不一樣的,但數(shù)組做為參數(shù)傳遞時就會退化為同類型的指針. str是數(shù)組擁有固定的內(nèi)存sizeof是計算它占的字節(jié)數(shù),而指針只是一個存放變量地址的一個變量在任何時候都是占四個字節(jié). 語言中不能用用strlen(),來求指針指向內(nèi)存空間的長度,初始化后的指針字符串才可以答:因為strlen()函數(shù)是用來計算字符串的長度,是以NULL來表示的字符串結(jié)尾的標(biāo)志,如果沒有\(zhòng)0這個字符的話,strlen()統(tǒng)計出來的長度是不正確的。52. C語言中函數(shù)的變參問題答:C語言中輸入和輸出格式控制函數(shù)的參數(shù)實現(xiàn)不定的變化,其實現(xiàn)的機(jī)理是因為VA_LIST,是在C語言中解決變參問題的一組宏,所在頭文件:include 。具體請參見百度百科。,基址和偏移地址從哪獲取答:物理地址=段基址*16+偏移地址段的首地址就是段的基地址,等于段寄存器的內(nèi)容*16。段寄存器分為CS(代碼段,Code Segment)、DS(數(shù)據(jù)段,Data Segment)、SS(堆棧段,Stack Segment)和ES(附加段數(shù)據(jù),Extra Segment)寄存器。當(dāng)進(jìn)行讀/寫存儲器操作數(shù)或者訪問變量時,自動選擇DS或者ES寄存器作為段基址。DS偏移地址對應(yīng)SI(Source Index源變址寄存器)、DI(Destination Index目的變址寄存器)CS偏移地址對應(yīng)IP(指針寄存器)SS偏移地址對應(yīng)BP(基址指針寄存器Base Pointer)或SP(堆棧指針寄存器Stack Pointer)ES偏移地址對應(yīng) DI(Destination Index目的變址寄存器) 答:8080的地址線是16條,8086/8088的地址線有20條,80286的地址線有24條,Intel80386微處理器提供了32位地址總線,Intel80386微處理器內(nèi)存管理的三種工作方式有三種:實地址方式,虛地址保護(hù)方式,虛擬8086方式。實地址模式:尋址采用和8086相同的16位段和偏移量,最大尋址空間1MB,最大分段64KB。可以使用32位指令。32位的x86 CPU用做高速的8086。保護(hù)模式:尋址采用32位段和偏移量,最大尋址空間4GB,最大分段4GB (Pentium Pre及以后為64GB)。虛擬8086方式:在保護(hù)模式下CPU可以進(jìn)入虛擬8086方式,這是在保護(hù)模式下的實模式程序運行環(huán)境。答:頁和分段系統(tǒng)有許多相似之處,但在概念上兩者完全不同,主要表現(xiàn)在:頁是信息的物理單位,分頁是為實現(xiàn)離散分配方式,以消減內(nèi)存的外零頭,提高內(nèi)存的 利用率;或者說,分頁僅僅是由于系統(tǒng)管理的需要,而不是用戶的需要。段是信息的邏輯單位,它含有一組其意義相對完整的信息。分段的目的是為了能更好的滿足 用戶的需要。頁的大小固定且由系統(tǒng)確定,把邏輯地址劃分為頁號和頁內(nèi)地址兩部分,是由機(jī)器硬件實現(xiàn)的,因而一個系統(tǒng)只能有一種大小的頁面。段的長度卻 不固定,決定于用戶所編寫的程序,通常由編輯程序在對源程序進(jìn)行編輯時,根據(jù)信息的性質(zhì)來劃分。分頁的作業(yè)地址空間是維一的,即單一的線性空間,程序 員只須利用一個記憶符,即可表示一地址。分段的作業(yè)地址空間是二維的,程序員在標(biāo)識一個地址時,既需給出段名,又需給出段內(nèi)地址。,這表示什么答:13u,0xffu,283u,這在C語言中表示定義變量時的后綴,u表示整型無符號數(shù)。()函數(shù)答:所在頭文件:功 能: 關(guān)閉所有文件,終止正在執(zhí)行的程序。exit(1)表示異常退出,exit(x)(x不為0)都表示異常退出。、malloc、calloc、realloc的理解答:他們返回的是指向開辟空間的void型指針,故需要強(qiáng)制類型轉(zhuǎn)換為需要的指針類型。如:float *p=(float *)malloc(100*sizeof(float))。即申請一個指向100個float型數(shù)據(jù)的指針,即float指針p。注意:void型指針可以強(qiáng)制轉(zhuǎn)換為其他類型的指針,并且其他類型的指針都可自動轉(zhuǎn)換為void型指針。58.C語言中的格式化函數(shù)答:fprintf()函數(shù):fprintf是C/C++中的一個格式化寫—庫函數(shù);其作用是格式化輸出到一個流/文件中。sscanf()函數(shù):從一個字符串中讀進(jìn)與指定格式相符的數(shù)據(jù)。sscanf與scanf類似,都是用于輸入的,只是后者以鍵盤(stdin)為輸入源,前者以固定字符串為輸入源。sprintf()函數(shù):字串格式化命令,主要功能是把格式化的數(shù)據(jù)寫入某個字符串中。sprintf 是個變參函數(shù)。sscanf()和sprintf()函數(shù)的區(qū)別:sscanf的作用是字符串轉(zhuǎn)換成字符,sprintf()函數(shù)是字符轉(zhuǎn)換成字符串。示例:十六進(jìn)制字符串穿轉(zhuǎn)換為ASCII字符串到dst中int v。for (i=0。 i16。 i++)
{
sscanf(result+i*2,%2x,amp。v)。
//dst[i]=(char)(vamp。0xFFu)。// 0xFFu表示無符號十六進(jìn)制數(shù),作用取余 }把ASCII字符串轉(zhuǎn)換成十六進(jìn)制字符串到result中 for (i=0。 i16。 i++) sprintf(result+2*i, %02x, digest[i])。 result[32]=0。59. C語言程序在VS2008編譯時候出現(xiàn)的奇怪的錯誤答:(1)error C2099: 初始值設(shè)定項不是常量,原因是C語言編譯器不允許變量申明在函數(shù)外,解決辦法是申明在函數(shù)內(nèi)。(2)異常代碼是:char *inputstr=8e7b27b2f9c02c7fe5687c66751f046100000000a6f9ba4e。inputstr[i] =‘d’。未處理的異常: 0xC0000005: 寫入位置 0x0135674c 時發(fā)生訪問沖突。分析:產(chǎn)生這種異常的原因是字符指針inputstr指向的是常量,該常量存放在內(nèi)存的常量區(qū),不允許修改,故拋出這種異常。解決辦法:不要對常量區(qū)的成員進(jìn)行值的更改。應(yīng)該放在堆棧區(qū)進(jìn)行操作。(3)C語言中在編譯的時候有時會出現(xiàn)error C2143: 語法錯誤: 缺少“?!?在“類型”的前面),但我們用24K鈦合金狗眼找了七七49分鐘,都沒有發(fā)現(xiàn)哪有少。這個符號,事實上,這是VS編譯器欺騙了我們,因為VS編譯器規(guī)定變量的聲明必須放在函數(shù)內(nèi)開始的部分,不能放在其他非變量申明語句的后面。(4)錯誤:RunTime Check Failure 2 Stack around the variable 39。v39。 was corrupted.錯誤代碼:char v。for (i=0。 i16。 i++)
{
sscanf(result+i*2,%2x,amp。v)。}解決辦法:將char v改為int v,這種導(dǎo)致棧損壞應(yīng)該是十六進(jìn)制格式寫入char類型變量的時候發(fā)生的,但是還不知道為什么會這樣。60. 常見排序算法:1簡單插入排序法 2希爾排序法 選擇排序法:1簡單選擇排序 2堆排序 交換排序:1 冒泡排序 2 快速排序冒泡排序:(Bubble Sort)它重復(fù)地走訪過要排序的數(shù)列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數(shù)列的工作是重復(fù)地進(jìn)行直到?jīng)]有再需要交換,也就是說該數(shù)列已經(jīng)排序完成。具體代碼演示請見百度百科。為穩(wěn)定排序??焖倥判颍海≦uicksort)是對冒泡排序的一種改進(jìn)。由C. A. R. Hoare在1962年提出。它的基本思想是:通過一趟排序?qū)⒁判虻臄?shù)據(jù)分割成獨立的兩部分,其中一部分的所有數(shù)據(jù)都比另外一部分的所有數(shù)據(jù)都要小,然后再按此方法對這兩部分?jǐn)?shù)據(jù)分別進(jìn)行快速排序,整個排序過程可以遞歸進(jìn)行,以此達(dá)到整個數(shù)據(jù)變成有序序列。
點擊復(fù)制文檔內(nèi)容
教學(xué)教案相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1