版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、C學(xué)習(xí)筆記 -必看知識點100例(上) -edited by lvlv from Nov. 8,2013 to Mar. 31,20141. define和ifndef的用法答:取消宏定義undef條件編譯預(yù)處理:#ifndef 標(biāo)識符 # define 標(biāo)識符 程序段 1 #else 程序段 2 #endif 它的作用是當(dāng) “ 標(biāo)識符 沒有由# d e f i n e定義過。 則編譯“程序段 1”。否則編譯“程序段 2” 。注意:條件編譯的作用是防止此頭文件被多個文件調(diào)用,產(chǎn)生編譯沖突,這里的表示符為當(dāng)前頭文件名的大寫前加上_,如果頭文件名為err.h,則標(biāo)示符為_ERR_H.2. exte
2、rn關(guān)鍵字的用法。extern可以置于變量或者函數(shù)前,以表示變量或者函數(shù)的定義在別的文件中,提示編譯器遇到此變量和函數(shù)時在其他模塊中尋找其定義。 另外,extern也可用來進(jìn)行鏈接指定。3. sizeof的結(jié)果等于對象或者類型所占的內(nèi)存字節(jié)數(shù)。 4. snprintf()函數(shù)的用法。答:函數(shù)原型int snprintf(char *str, size_t size, const char *format, .);功能將可變個參數(shù)(.)按照format格式化成字符串,然后將其復(fù)制到str中。返回欲寫入的字符串長度,若出錯則返回負(fù)值。5. volatile(不穩(wěn)定的,易變的)關(guān)鍵字答:volati
3、le i=10; k=i;volatile 告訴編譯器i是隨時可能發(fā)生變化的,每次使用它的時候必須從i的地址中讀取,因而編譯器生成的可執(zhí)行碼會重新從i的地址讀取數(shù)據(jù)放在k中。 6. strtok函數(shù)的用法。答:函數(shù)原型char *strtok(char s, const char *delim);例如:strtok("abc,def,ghi",","),最后可以分割成為abc def ghi.尤其在點分十進(jìn)制的IP中提取應(yīng)用較多。7.MIC?答:英特爾集成眾核(Intel Many Integrated Core,MIC)架構(gòu)是英特爾公司現(xiàn)有產(chǎn)品(包括英
4、特爾至強(qiáng)處理器在內(nèi))的另一個關(guān)鍵補(bǔ)充。這種架構(gòu)能在一顆芯片里面支持200多個線程同時工作。MIC眾核協(xié)處理器Knight Corner,和之前上代Larrabee繼承者Knights Ferry不同的是,新的Knights Corner從外表上看是采用與Xeon類似的LGA/BGA封裝。從這點來看,集成50個x86核心,運(yùn)算能力達(dá)到1TFLOPS的Knights Corner可能會放棄“加速卡”的形式,采用QPI總線替代PCI-E界面。7. C語言中函數(shù)指針變量的詳細(xì)介紹答:函數(shù)指針變量的作用:指向函數(shù)入口地址,用來調(diào)用函數(shù)。使用函數(shù)指針的好處在于,可以將實現(xiàn)同一功能的多個模塊統(tǒng)一起來標(biāo)識,這
5、樣一來更容易后期的維護(hù),系統(tǒng)結(jié)構(gòu)更加清晰?;蛘邭w納為:便于分層設(shè)計、利于系統(tǒng)抽象、降低耦合度以及使接口與實現(xiàn)分開。函數(shù)指針變量定義的一般形式為:類型說明符 (* 指針變量名 )();其中 " 類型說明符 " 表示被指函數(shù)的返回值的類型。 "(* 指針變量名 )" 表示 "*" 后面的變量是定義的指針變量。 最后的空括號表示指針變量所指的是一個函數(shù)。例如申明函數(shù)指針變量:int (*pf)()或者char * (*pf)();后者表示 pf 是一個指向函數(shù)入口的指針變量,該函數(shù)的返回值 ( 函數(shù)值 ) 是指針型,指向字符串。使用方法:i
6、nt max(int x,int y)pf=函數(shù)名; (*pf)(int x,int y);8.conio.h頭文件的說明答:conio.h不是C標(biāo)準(zhǔn)庫中的頭文件,在C standard library,ISO C 和POSIX標(biāo)準(zhǔn)中均沒有定義。conio是Console Input/Output(控制臺輸入輸出)的簡寫,其中定義了通過控制臺進(jìn)行數(shù)據(jù)輸入和數(shù)據(jù)輸出的函數(shù),主要是一些用戶通過按鍵盤產(chǎn)生的對應(yīng)操作,比如getch()函數(shù)等等。大部分DOS,Windows 3.x,Phar Lap,DOSX,OS/2 or Win32平臺上的C編譯器提供此文件,UNIX 和Linux平臺的c編譯器通
7、常不包含此頭文件。如果需要使用此頭文件,可以從互聯(lián)網(wǎng)下載。conio庫不僅適用于 Windows 平臺,在 Linux 下也可使用.網(wǎng)上已經(jīng)有兼容包,下載后打開就可使用;而至于 Mac 則完全跟 Windows 沒有區(qū)別,直接可以使用.9. +i和i+的效率的比較。答:簡單的比較前綴自增運(yùn)算符和后綴自增運(yùn)算符的效率是片面的,因為存在很多因素影響這個問題的答案。以現(xiàn)在的編譯器的優(yōu)化水平,在內(nèi)建數(shù)據(jù)類型的情況下,效率沒有區(qū)別。在自定義數(shù)據(jù)類型的情況下,+i的效率較高。10.C語言中near和far關(guān)鍵字的作用?答:far是和near對應(yīng)的,就是一般程序的函數(shù)調(diào)用都在64k地址范圍內(nèi)的,就是16位尋
8、址就夠了,但是當(dāng)代碼比較龐大時,16位就可能不夠了.far就代表32位尋址,函數(shù)的本質(zhì)就是個地址,指針的本質(zhì)也是個地址,所以就有了尋址的問題。11.頭文件中stdlib.h內(nèi)容。答:stdlib.h里面定義了五種類型、一些宏和通用工具函數(shù)。 類型例如size_t、wchar_t、div_t、ldiv_t和lldiv_t; 宏例如EXIT_FAILURE、EXIT_SUCCESS、RAND_MAX和MB_CUR_MAX等等; 常用的函數(shù)如malloc()、calloc()、realloc()、free()、system()、atoi()、atol()、rand()、srand()、exit()等
9、等。12. #define只有宏名定義是什么意思!答: 一般來說這樣空的宏都是為了某些手段的,例如跨平臺,比如說在windows下我讓a賦值為10,在linux下要讓a賦值為20,那么就可以這么寫#ifdef WINDOWSa = 10;#endif#ifdef LINUXa = 20;#endif;這樣我只要在某個地方定義一個#define WINDOWS或者#define LINUX就可以在跨平臺的情況下采取不同的策略了.#undef 是在后面取消以前定義的宏定義18. extern “C”修飾符的理解!答:被extern "C"修飾的變量和函數(shù)是按照C語言方式編譯和連
10、接的;19.C+中增加函數(shù)重載的功能的內(nèi)部原理!答:C語言是不支持函數(shù)重載功能的,void foo( int x, int y );該函數(shù)被C編譯器編譯后在符號庫中的名字為_foo,而C+編譯器則會產(chǎn)生像_foo_int_int之類的名字(不同的編譯器可能生成的名字不同,但是都采用了相同的機(jī)制,生成的新名字稱為“mangled name”)。_foo_int_int這樣的名字包含了函數(shù)名、函數(shù)參數(shù)數(shù)量及類型信息,C+就是靠這種機(jī)制來實現(xiàn)函數(shù)重載的。20.理解C、C+和C#中變量生存期的區(qū)別!答:應(yīng)該從作用域的角度來區(qū)分變量的生存周期,生存周期分為三種:整個程序:修飾的關(guān)鍵字有static當(dāng)前文
11、件(.c、.cpp、.cs文件):修飾的關(guān)鍵字有:C語言:auto(自動變量),C+語言:private、protected、public等,C#中:private、protected、public、partial等。當(dāng)前程序段(if語句段、函數(shù)體等):修飾的關(guān)鍵字有:同當(dāng)前文件注:函數(shù)體外定義靜態(tài)變量為全局靜態(tài)變量,函數(shù)體內(nèi)定義靜態(tài)變量為局部靜態(tài)變量,二者生存周期都是整個程序。且C語言中沒有私有和公有之分,C+擴(kuò)充了這一個功能。21.引用和指針的區(qū)別?答:1.從內(nèi)存上來講 系統(tǒng)為指針分配內(nèi)存空間,而引用與綁定的對象共享內(nèi)存空間,系統(tǒng)不為引用變量分配內(nèi)容空間。2指針初始化以后可以改變指向的對象
12、,而引用定義的時候必須要初始化,且初始化以后不允許再重新綁定對象。3.所以引用訪問對象是直接訪問。指針訪問對象是間接訪問。4。如果pa是指針,那么*pa就是引用了。又如int a,&ra= a;那么ra就是a的reference了。22. c語言中頭文件、庫文件和.c文件的聯(lián)系與區(qū)別。答:h頭文件是編譯時必須的,lib是鏈接時需要的,dll是運(yùn)行時需要的。附加依賴項的是.lib不是.dll,若生成了DLL,則肯定也生成 LIB文件。如果要完成源代碼的編譯和鏈接,有頭文件和lib就夠了。如果也使動態(tài)連接的程序運(yùn)行起來,有dll就夠了。在開發(fā)和調(diào)試階段,當(dāng)然最好都有。23.C語言中編譯鏈接
13、的過程!答:obj文件是目標(biāo)文件,一般是程序編譯后的二進(jìn)制文件,在通過鏈接器和資源文件鏈接就成exe文件了。 OBJ只給出了程序的相對地址,而EXE是絕對地址。 OBJ文件不支持有孔的多邊形面。24.常見字符編碼有:ASCII編碼(American Standard Code for Information Interchange)基本的 ASCII 字符集共有 128 個字符,包括常用的字母、數(shù)字、標(biāo)點符號等,一個字節(jié)來存放一個 ASCII 字符。BIG-5碼:是通行于臺灣、香港地區(qū)的一個繁體字編碼方案,俗稱“大五碼”。GB2312編碼:對ASCII編碼的擴(kuò)充,收錄簡體中文和常用字符,通用于
14、中國大陸。每個漢字占用兩個字節(jié)。基本集共收入漢字6763個和非漢字圖形字符682個。對于人名、古漢語等方面出現(xiàn)的罕用字,GB 2312不能處理,這導(dǎo)致了后來GBK及GB 18030漢字字符集的出現(xiàn)。GBK編碼:對GB2312的擴(kuò)充,收錄了繁體中文,簡、繁體字融于一庫,每個漢字占用兩個字節(jié)。Unicode編碼:注意,Unicode只是一個編碼規(guī)范,目前實際實現(xiàn)的unicode編碼只要有三種:UTF-8,UCS-2和UTF-16。Unicode當(dāng)然是一個很大的集合,現(xiàn)在的規(guī)??梢匀菁{100多萬個符號。Unicode固然統(tǒng)一了編碼方式,但是它的效率不高,比如UCS-4(Unicode的標(biāo)準(zhǔn)之一)規(guī)定
15、用4個字節(jié)存儲一個符號,那么每個英文字母前都必然有三個字節(jié)是0,這對存儲和傳輸來說都很耗資源。UTF-8編碼:UTF-8是一種8位的unicode字符集,編碼長度是可變的,并且是ASCII字符集的嚴(yán)格超集,也就是說ASCII中每個字符的編碼在UTF-8中 是完全一樣的。UTF-8字符集中,一個字符可能是1個字節(jié),2個字節(jié),3個字節(jié)或者4個字節(jié)長。一般來說,歐洲的字母字符長度為1到2個字節(jié),而亞洲的 大部分字符則是3個字節(jié),附加字符為4個字節(jié)長。UCS-2編碼:UCS-2是固定長度為16位的unicode字符集。每個字符都是2個字節(jié),UCS-2只支持unicode3.0,所以不支持附加字符。UC
16、S-2的優(yōu)點: 對于亞洲字符的存儲空間需求比UTF-8少,因為每個字符都是2個字節(jié)。 處理字符的速度比UTF-8更快,因為是固定長度編碼的。 對于windows和java的支持更好。UTF-16編碼:UTF-16也是一種16位編碼的字符集。實際上,UTF-16就是UCS-2加上附加字符的支持,也就是符合unicode4.0規(guī)范的UCS-2。所以UTF-16是UCS-2的嚴(yán)格超集。UTF-16中的字符,要么是2個字節(jié),要么是4個字節(jié)表示的。UTF-16主要在windows2000以上版本使用。UTF-16相對UTF-8的優(yōu)點,和UCS-2是一致的??偨Y(jié):在亞洲進(jìn)行在web開發(fā)時,面向的是全球,使
17、用UTF-8編碼是絕對沒有錯的,面向亞洲的話,使用UCS-2和UTF編碼效率會更高。綜上所述,使用UTF-8編碼絕對沒有錯,不會出現(xiàn)編碼亂碼的現(xiàn)象。25.Sql Sever 中char、varchar、nchar和nvarchar的對比區(qū)別!答:ncahr和nvarchar采用unicode編碼,固定每個字符占用兩個字節(jié),char和varchar固定每個字符采用一個字節(jié)。所以一般來說,如果含有中文字符,用nchar/nvarchar,如果純英文和數(shù)字,用char/varchar我把他們的區(qū)別概括成:CHAR,NCHAR 定長,速度快,占空間大,需處理VARCHAR,NVARCHAR,TEXT
18、不定長,空間小,速度慢,無需處理。注意:操作系統(tǒng)的語言環(huán)境支持中文可以使用char和varchar,如果操作系統(tǒng)環(huán)境不支持中文,必須使用nvarchar和ncahr。請協(xié)調(diào)好存儲代價和兼容性之間的關(guān)系。26. MD5利用salt進(jìn)行加密的過程程?用戶輸入【賬號】和【密碼】(以及其他用戶信息); 系統(tǒng)為用戶生成【Salt值】; 系統(tǒng)將【Salt值】和【用戶密碼】連接到一起; 對連接后的值進(jìn)行散列,得到【Hash值】; 將【Hash值1】和【Salt值】分別放到數(shù)據(jù)庫中。 用戶登錄時,用戶輸入【賬號】和【密碼】; 系統(tǒng)通過用戶名找到與之對應(yīng)的【Hash值】和【Salt值】; 系統(tǒng)將【Salt值】和
19、【用戶輸入的密碼】連接到一起; 對連接后的值進(jìn)行散列,得到【Hash值2】(注意是即時運(yùn)算出來的值); 比較【Hash值1】和【Hash值2】是否相等,相等則表示密碼正確,否則表示密碼錯誤。 有時候,為了減輕開發(fā)壓力,程序員會統(tǒng)一使用一個salt值(儲存在某個地方),而不是每個用戶都生成私有的salt值。27.MD5簡介!答:Message Digest Algorithm MD5(中文名為消息摘要算法第五版)為計算機(jī)安全領(lǐng)域廣泛使用的一種散列函數(shù),用以提供消息的完整性保護(hù)。用于確保信息傳輸完整一致。是計算機(jī)廣泛使用的雜湊算法之一(又譯摘要算法、哈希算法),主流編程語言普遍已有MD5實現(xiàn)算法原
20、理:對MD5算法簡要的敘述可以為:MD5以512位分組來處理輸入的信息,且每一分組又被劃分為16個32位子分組,經(jīng)過了一系列的處理后,算法的輸出由四個32位分組組成,將這四個32位分組級聯(lián)后單目運(yùn)算符28.C語言中運(yùn)算符的優(yōu)先級別!30. alloca ,malloc、calloc和realloc的理解!答:alloca ()是分配在棧上,calloc()”是”分配內(nèi)存給多個對象”,” malloc()”是”分配內(nèi)存給一個對象”,”realloc()”是”重新分配內(nèi)存”之意?!眆ree()”就比較簡單了,”釋放”的意思,就是把之前所分配的內(nèi)存空間給釋放出來。參數(shù)均為以字節(jié)為單位。注意:allo
21、ca不具可移植性,而且在沒有傳統(tǒng)堆棧的機(jī)器上很難實現(xiàn)。當(dāng)它的返回值直接傳入另一個函數(shù)時會帶來問題,因為他分配在棧上。 31.strstr(char *str1, char *str2)和strchr(const char *s,char c)的分別和用法!答:是分別求字符串和字符在前面字符串中第一次出現(xiàn)的地址的指針,指針的內(nèi)容就是地址,返回的地址是字符串在內(nèi)存中隨機(jī)分配的地址再加上你所搜索的字符在字符串位置,如果s中不存在c則返回NULL。32. strcpy和memcpy主要有以下3方面的區(qū)別。1、復(fù)制的內(nèi)容不同。strcpy只能復(fù)制字符串,而memcpy可以復(fù)制任意內(nèi)容,例如字符數(shù)組、整型
22、、結(jié)構(gòu)體、類等。2、復(fù)制的方法不同。strcpy不需要指定長度,它遇到被復(fù)制字符的串結(jié)束符"0"才結(jié)束,所以容易溢出。memcpy則是根據(jù)其第3個參數(shù)決定復(fù)制的長度。3、用途不同。通常在復(fù)制字符串時用strcpy,而需要復(fù)制其他類型數(shù)據(jù)時則一般用memcpy。33.函數(shù)指針的用法答:函數(shù)指針的定義:/ 申明函數(shù)指針pfint (*pf)(const int&, const int&); / 具體函數(shù)int intCompare(const int& aInt, const int& bInt)可將函數(shù)指針pf指向函數(shù)intComparepf
23、= intCompare; 調(diào)用:/ 使用pfif(pf(aInt, bInt) = 0)cout << "two integers are equal" << "." << endl;或者用pf來申明其他的函數(shù)指針:/ 定義函數(shù)指針類型cmpFuntypedef int (*cmpFun)(const int&, const int&);cmpFun pf= intCompare;表示:pf指向函數(shù)intCompare();/函數(shù)名可以作為參數(shù),申明形式是函數(shù)指針作為參數(shù),其做法為int plusFu
24、n(int& aInt, int(*paf2)(const int&, const int&)int bInt = 1;int cInt = 2;return aInt + paf2(bInt, cInt);函數(shù)指針作為返回值一個函數(shù)的返回值可以是一個函數(shù)指針,這個聲明形式寫起來有點麻煩:/ 函數(shù)指針作為返回值int (*retFunPointer(int)(const int&, const int&);上面的聲明的含義:a) retFunPointer是一個函數(shù),該函數(shù)有一個in
25、t類型的參數(shù);b) retFunPointer返回值是一個函數(shù)指針,它指向的是帶有兩個const int&類型參數(shù),且返回類型為int的函數(shù)。 retFunPointer的定義:/ 函數(shù)指針為返回值,整個函數(shù)名為retFunPointer,把自己裝扮成函數(shù)指針,作為返回值。int (*retFunPointer(int aInt)(const int&, const int&)cout << aInt << endl;/ pf已經(jīng)在前面定義過了return pf;調(diào)
26、用代碼示例:/ 函數(shù)指針作為返回值,retFunPointer返回一個cmpFun類型的函數(shù)指針cmpFun pf3 = retFunPointer(aaInt);int result = pf3(aaInt, bbInt);cout << result << endl;34.注意:答:C語言中,頭文件中include的頭文件內(nèi)申明的函數(shù),在當(dāng)前.c文件中,是可以間接調(diào)用的!35.注意答:C語言中沒有bool類型,用0和1來表示真假!C語言和C+都是強(qiáng)類型的,變量在申明時候就要指定類型,而不是等編譯器根據(jù)編譯時候所賦的值來確定其便編譯時的類型。36. MD5算法原理簡介
27、!答:對MD5算法簡要的敘述可以為:MD5以512位分組來處理輸入的信息,且每一分組又被劃分為16個32位子分組,經(jīng)過了一系列的處理后,算法的輸出由四個32位分組組成,將這四個32位分組級聯(lián)后將生成一個128位散列值。也就是32個十六進(jìn)制的字符,每個字符占4位從0到f,均為小寫,因此叫做128位散列值。37. strncmp()函數(shù)簡介答:用 法: int strncmp(char *str1, char *str2, int maxlen);說明:此函數(shù)功能即比較字符串str1和str2的前maxlen個字符。如果前maxlen字節(jié)完全相等,返回值就=0;在前maxlen字節(jié)比較過程中,如果
28、出現(xiàn)str1n與str2n不等,則返回(str1n-str2n)1。38. <<和>>和>>>這三個運(yùn)算符號的理解答:<<(左移)運(yùn)算規(guī)則:按二進(jìn)制形式把所有的數(shù)字向左移動對應(yīng)的位數(shù),高位移出(舍棄),低位的空位補(bǔ)零。數(shù)學(xué)意義:在數(shù)字沒有溢出的前提下,對于正數(shù)和負(fù)數(shù),左移一位都相當(dāng)于乘以2的1次方,左移n位就相當(dāng)于乘以2的n次方。>>(帶符號右移)運(yùn)算規(guī)則:按二進(jìn)制形式把所有的數(shù)字向右移動對應(yīng)的位數(shù),低位移出(舍棄),高位的空位補(bǔ)符號位,即正數(shù)補(bǔ)零,負(fù)數(shù)補(bǔ)1。數(shù)學(xué)意義:右移一位相當(dāng)于除2,右移n位相當(dāng)于除以2的n次方。這里是取商
29、哈,余數(shù)就不要了。>>>(無符號右移)運(yùn)算規(guī)則:按二進(jìn)制形式把所有的數(shù)字向右移動對應(yīng)位數(shù),低位移出(舍棄),高位的空位補(bǔ)零。對于正數(shù)來說和帶符號右移相同,對于負(fù)數(shù)來說不同。 其他結(jié)構(gòu)和>>相似。39.getch()函數(shù)和getchar()函數(shù)的區(qū)別答:getch():所在頭文件:conio.h函數(shù)用途:從控制臺讀取一個字符,但不顯示在屏幕上,然后程序繼續(xù)執(zhí)行下去。getchar()函數(shù):所在頭文件時stdio.h函數(shù)用途:用戶按下字符后,等待用戶按下回車,然后繼續(xù)執(zhí)行,且返回值顯示在屏幕上。40.注意strlen()函數(shù)求字符串長度的時候不會講結(jié)尾符號0算進(jìn)去。s
30、ubstr()函數(shù)是C+中的函數(shù),C語言中沒有這個函數(shù),要想實現(xiàn)這個功能,可以使用strncpy()或者memcpy來實現(xiàn)。41. strncpy()和memcpy()的區(qū)別答:二者都可指定長度來實現(xiàn)串的拷貝。不同點是當(dāng)然有區(qū)別,strncpy()時拷貝字符串,memcpy()是拷貝內(nèi)存內(nèi)容,可以拷貝其他類型的數(shù)據(jù)。42. sizeof()函數(shù)答:sizeof是運(yùn)算符,可用于任何變量名、類型名或常量值,當(dāng)用于變量名(不是數(shù)組名)或常量時,它不需要用圓括號。它在編譯時起作用,而不是運(yùn)行時。sizeof的結(jié)果等于對象或者類型所占的內(nèi)存字節(jié)數(shù),包括字符串的結(jié)尾符0,strlen()求字符串的長度不包
31、括結(jié)尾符0。43. memet()函數(shù),解決內(nèi)存內(nèi)存空間出現(xiàn)屯屯屯屯屯屯和燙燙燙燙燙燙亂碼答:void *memset(void *s, char ch, size_t n);將s所指向的某一塊內(nèi)存中的每個字節(jié)的內(nèi)容全部設(shè)置為ch指定的ASCII值, 塊的大小由第三個參數(shù)指定,這個函數(shù)通常為新申請的內(nèi)存做初始化工作, 其返回值為指向S的指針。其中void *s空指針,指針不指向任何地址空間。初始化內(nèi)存地址空間后就會解決亂碼問題,用memset(s,NULL,sizeof(s).亂碼問題是因為使用malloc()申請的內(nèi)存空間沒有初始化,默認(rèn)賦值0xcc,打印出來就是屯屯屯,malloc申請的空
32、間是在"堆"上的,可手動釋放。使用alloca()申請內(nèi)存會產(chǎn)生燙燙燙燙燙燙,與malloc,calloc,realloc類似,但是注意一個重要的區(qū)別,_alloca是在棧(stack)上申請空間,用完馬上就釋放,無需手動釋放。44. c語言中定義變量不賦初值默認(rèn)是多少?答:C語言中,沒有加static 默認(rèn)為auto 型此時不給初值的變量的初值是隨機(jī)的,但是 如果加了 static,不給初值的變量的初值是默認(rèn)是0,指針也是一樣,其實 NULL 的值就是0,只是它不代表任何地址。45.C語言從源碼到可執(zhí)行程序的四個過程答: 預(yù)處理(也稱預(yù)編譯,Preprocessing):
33、C語言的預(yù)處理主要有三個方面的內(nèi)容: 1.宏定義; 2.文件包含; 3.條件編譯。 預(yù)處理命令以符號“#”開頭,這個方面本質(zhì)是將需要的代碼包含到當(dāng)前的.c文件中。編譯(Compilation):編譯所做的工作就是詞法分析,語法分析,在進(jìn)行匯編成中間代碼,匯編代碼。匯編(Assembly):匯編實際上指把匯編語言代碼翻譯成目標(biāo)機(jī)器指令的過程。經(jīng)過這一處理而得到相應(yīng)的目標(biāo)文件。目標(biāo)文件中所存放的也就是與源程序等效的目標(biāo)的機(jī)器語言代碼。目標(biāo)文件由段組成。通常一個目標(biāo)文件中至少有兩個段:代碼段:該段中所包含的主要是程序的指令。該段一般是可讀和可執(zhí)行的,但一般卻不可寫。數(shù)據(jù)段:主要存放程序中要用到的各種
34、全局變量或靜態(tài)的數(shù)據(jù)。一般數(shù)據(jù)段都是可讀,可寫,可執(zhí)行的。鏈接(Linking):鏈接程序的主要工作就是將有關(guān)的目標(biāo)文件彼此相連接,也即將在一個文件中引用的符號同該符號在另外一個文件中的定義連接起來,使得所有的這些目標(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ùn)行時相應(yīng)進(jìn)程的虛地址空間。動態(tài)
35、鏈接程序?qū)⒏鶕?jù)可執(zhí)行程序中記錄的信息找到相應(yīng)的函數(shù)代碼。 46.GCC編譯器編譯的過程答:實質(zhì)上,GCC的編譯過程是分為四個階段進(jìn)行的,即預(yù)處理(也稱預(yù)編譯,Preprocessing)、編譯(Compilation)、匯編 (Assembly)和連接(Linking)。一步到位編譯:gcc test.c -o test.out 輸出可執(zhí)行文件test.out預(yù)處理:gcc -E test.c -o test.i 或 gcc -E test.c編譯為匯編代碼(Compilation):gcc -S test.i -o test.s匯編(Assembly):gcc -c test.s
36、-o test.o,編譯成目標(biāo)文件test.o。連接(Linking):gcc test.o -o test.out47. C語言程序調(diào)試的常見錯誤分析與解決辦法答:C語言程序的編譯是以.c文件為單位進(jìn)行編譯的,生成.obj二進(jìn)制目標(biāo)文件,最后在鏈接成可執(zhí)行文件。編譯提示的錯誤:編譯的時候進(jìn)行詞法分析和語法分析,此時書寫不符合語法規(guī)則或者未定義會進(jìn)行報錯,這種錯誤容易處理。鏈接提示的錯誤:經(jīng)常會出現(xiàn)某函數(shù)已經(jīng)在main.obj文件中定義,出現(xiàn)重復(fù)編譯。這時候預(yù)處理的條件編譯就發(fā)揮作用了,可以防止重復(fù)編譯。但是,作用只能是防止變量的申明的重復(fù)編譯,而不能防止變量的定義的重復(fù)編譯。也就是說,在頭文
37、件中定義了函數(shù)之后,在不同的.c文件引入頭文件中,兩個.c文件生成的obj文件中都會含有對函數(shù)體代碼的目標(biāo)代碼。原因是,我個人理解是,條件編譯之所以對頭文件中定義的函數(shù)不能起到防止重復(fù)編譯的功能,是因為函數(shù)體的實現(xiàn)代碼編譯后最終是要存入obj目標(biāo)文件中的,編譯是 以.c文件為單位的,每個.c文件都會被編譯成.obj文件,但是.h文件中不能編譯成obj文件,因此其函數(shù)的定義部分,即實現(xiàn)部分一定要編譯成目標(biāo)代 碼存入obj文件,供鏈接時使用。但是當(dāng)兩個.c文件同時引用頭文件時,兩個.c文件都可包含函數(shù)實現(xiàn)部分的代碼的目標(biāo)代碼,編譯器沒有規(guī)定將函數(shù)代碼的 目標(biāo)代碼存入哪個.c文件,只能兩個同時包含,
38、這就導(dǎo)致了鏈接時出現(xiàn)的重復(fù)定義的問題。解決的辦法就是不要在頭文件中定義變量,只能申明?;蛘咧荒茏屢?個.c文件引用含有定義變量的頭文件,或者用static來修飾函數(shù),定義為全局靜態(tài)類型函數(shù),這樣的話函數(shù)代碼就會被存到全局/靜態(tài)存儲區(qū),編譯時只會被編譯一次,若非static靜態(tài)全局變量,函數(shù)被包含進(jìn).c文件后,就變成了當(dāng)前.c文件的全局變量,而不是整個程序的全局變量,這就導(dǎo)致了每個.c文件把它當(dāng)做自己的函數(shù)來進(jìn)行編譯,將目標(biāo)代碼存入自己的obj文件中,鏈接時就會出錯。 48.C/C+語言中程序在內(nèi)存中的分區(qū)情況答:在C+中,內(nèi)存分成5個區(qū),他們分別是堆、棧、自由存儲區(qū)、全局/靜態(tài)存儲區(qū)和常量存儲
39、區(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ū),他們里面存放的
40、是常量,不允許修改50.C語言中sizeof()不能用來求指針指向的內(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é).51.C 語言中不能用用strlen(),來求指針指向內(nèi)存空間的長度,初始化后的指針字符串才
41、可以答:因為strlen()函數(shù)是用來計算字符串的長度,是以NULL來表示的字符串結(jié)尾的標(biāo)志,如果沒有0這個字符的話,strlen()統(tǒng)計出來的長度是不正確的。52. C語言中函數(shù)的變參問題答:C語言中輸入和輸出格式控制函數(shù)的參數(shù)實現(xiàn)不定的變化,其實現(xiàn)的機(jī)理是因為VA_LIST,是在C語言中解決變參問題的一組宏,所在頭文件:#include <stdarg.h>。具體請參見百度百科。53.8086/8088處理器中段的首地址,基址和偏移地址從哪獲取答:物理地址段基址*16+偏移地址段的首地址就是段的基地址,等于段寄存器的內(nèi)容*16。段寄存器分為CS(代碼段,Code Segment
42、)、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目的變址寄存器) 53.C語言中地址尋址與處理器的關(guān)系答
43、:8080的地址線是16條,8086/8088的地址線有20條,80286的地址線有24條,Intel 80386 微處理器提供了32位地址總線,Intel 80386 微處理器內(nèi)存管理的三種工作方式 有三種:實地址方式,虛地址保護(hù)方式,虛擬8086方式。 實地址模式:尋址采用和8086相同的16位段和偏移量,最大尋址空間1MB,最大分段64KB??梢允褂?2位指令。32位的x86 CPU用做高速的8086。保護(hù)模式:尋址采用32位段和偏移量,最大尋址空間4GB,最大分段4GB (Pentium Pre及以后為64GB)。虛擬8086
44、方式:在保護(hù)模式下CPU可以進(jìn)入虛擬8086方式,這是在保護(hù)模式下的實模式程序運(yùn)行環(huán)境。54.操作系統(tǒng)內(nèi)存分段管理和分頁管理的區(qū)別答:頁和分段系統(tǒng)有許多相似之處,但在概念上兩者完全不同,主要表現(xiàn)在:1、頁是信息的物理單位,分頁是為實現(xiàn)離散分配方式,以消減內(nèi)存的外零頭,提高內(nèi)存的 利用率;或者說,分頁僅僅是由于系統(tǒng)管理的需要,而不是用戶的需要。段是信息的邏輯單位,它含有一組其意義相對完整的信息。分段的目的是為了能更好的滿足 用戶的需要。2、頁的大小固定且由系統(tǒng)確定,把邏輯地址劃分為頁號和頁內(nèi)地址兩部分,是由機(jī)器硬件實現(xiàn)的,因而一個系統(tǒng)只能有一種大小的頁面。段的長度卻 不固定,決定于用戶所編寫的程
45、序,通常由編輯程序在對源程序進(jìn)行編輯時,根據(jù)信息的性質(zhì)來劃分。3、分頁的作業(yè)地址空間是維一的,即單一的線性空間,程序 員只須利用一個記憶符,即可表示一地址。分段的作業(yè)地址空間是二維的,程序員在標(biāo)識一個地址時,既需給出段名,又需給出段內(nèi)地址。55.C語言程序中常量會經(jīng)常出現(xiàn)后面有個u,這表示什么答:13u,0xffu,283u,這在C語言中表示定義變量時的后綴,u表示整型無符號數(shù)。56.exit()函數(shù)答:所在頭文件:stdlib.h功 能: 關(guān)閉所有文件,終止正在執(zhí)行的程序。exit(1)表示異常退出,exit(x)(x不為0)都表示異常退出。57.對于內(nèi)存空間分配函數(shù)alloca、mallo
46、c、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型指針。58C語言中的格式化函數(shù)答:fprintf()函數(shù):fprintf是C/C+中的一個格式化寫庫函數(shù);其作用是格式化輸出到一個流/文件中。sscanf()函數(shù):從一個字符串中讀進(jìn)與指定格式相符的數(shù)據(jù)。sscanf與scanf類似
47、,都是用于輸入的,只是后者以鍵盤(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; i<16; i+) sscanf(result+i*2,"%2x",&v); /dsti=(char)(v&0xFFu);/ 0xFFu表示無符號十六
48、進(jìn)制數(shù),作用取余 把ASCII字符串轉(zhuǎn)換成十六進(jìn)制字符串到result中 for (i=0; i<16; i+)sprintf(result+2*i, "%02x", digesti);result32=0;59. C語言程序在VS2008編譯時候出現(xiàn)的奇怪的錯誤答:(1)error C2099: 初始值設(shè)定項不是常量,原因是C語言編譯器不允許變量申明在函數(shù)外,解決辦法是申明在函數(shù)內(nèi)。(2)異常代碼是:char *inputstr="8e7b27b2f9c02c7fe5687c66751f046100000000a6f9ba4e"inputstri
49、 =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)錯誤:Run-T
50、ime Check Failure #2 - Stack around the variable 'v' was corrupted.錯誤代碼:char v;for (i=0; i<16; i+) sscanf(result+i*2,"%2x",&v);解決辦法:將char v改為int v,這種導(dǎo)致棧損壞應(yīng)該是十六進(jìn)制格式寫入char類型變量的時候發(fā)生的,但是還不知道為什么會這樣。60. 常見排序算法答.插入排序法:1簡單插入排序法 2希爾排序法 選擇排序法:1簡單選擇排序 2堆排序 交換排序:1 冒泡排序 2 快速排序冒泡排序:(Bubbl
51、e 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ù)變成有序序列。為不穩(wěn)定排序。簡單插入排序法:比如如下示例1 5 7 3 1 6把表分成
52、兩部分,前半部分已排序,后半部分未排序,我用|分開初始為 5 | 1 7 3 1 6一次插入排序,把第一個1插入前邊已排序部分,得1 5 | 7 3 1 6后邊依次是1 5 7 | 3 1 61 3 5 7 | 1 61 1 3 5 7 | 61 1 3 5 6 7 |為穩(wěn)定排序。希爾排序:(Shell Sort)是插入排序的一種。是針對直接插入排序算法的改進(jìn)。該方法又稱縮小增量排序,因DLShell于1959年提出而得名。希爾排序的基本思想是:將需要排序的序列劃分成為d個較小的子序列,所有距離為d的倍數(shù)的記錄放在同一個序列中。然后對子序列進(jìn)行插入排序,通過插入排序能夠使得原來序列基本有序。這
53、樣通過對較小的序列進(jìn)行插入排序,然后對基本有序的數(shù)列進(jìn)行插入排序,能夠提高插入排序算法的效率。增量d的選取原則:去上一個增量的一般作為此次序列的劃分增量。為不穩(wěn)定排序。簡單選擇排序: 設(shè)所排序序列的記錄個數(shù)為n。i取1,2,n-1,從所有n-i+1個記錄(Ri,Ri+1,Rn)中找出排序碼最小的記錄,與第i個記錄交換。執(zhí)行n-1趟 后就完成了記錄序列的排序。為不穩(wěn)定排序。堆排序:61.C語言跟內(nèi)存分配方式(1)從靜態(tài)存儲區(qū)域分配。內(nèi)存在程序編譯的時候就已經(jīng)分配好,這塊內(nèi)存在程序的整個運(yùn)行期間都存在。例如全局變量,static變量。(2)在棧上創(chuàng)建。在執(zhí)行函數(shù)時,函數(shù)內(nèi)局部變量的存儲單元都可以在
54、棧上創(chuàng)建,函數(shù)執(zhí)行結(jié)束時這些存儲單元自動被釋放。棧內(nèi)存分配運(yùn)算內(nèi)置于處理器的指令集中,效率很高,但是分配的內(nèi)存容量有限。(3)從堆上分配,亦稱動態(tài)內(nèi)存分配。程序在運(yùn)行的時候用malloc或new申請任意多少的內(nèi)存,程序員自己負(fù)責(zé)在何時用free或delete釋放內(nèi)存。動態(tài)內(nèi)存的生存期由我們決定,使用非常靈活,但問題也最多C語言跟內(nèi)存申請相關(guān)的函數(shù)主要有 alloca,calloc,malloc,free,realloc,sbrk等.其中alloca是向棧申請內(nèi)存,因此無需釋放. malloc分配的內(nèi)存是位于堆中的,并且沒有初始化內(nèi)存的內(nèi)容,因此基本上malloc之后,調(diào)用函數(shù)memset來初始
55、化這部分的內(nèi)存空間.calloc則將初始化這部分的內(nèi)存,設(shè)置為0. 而realloc則對malloc申請的內(nèi)存進(jìn)行大小的調(diào)整.申請的內(nèi)存最終需要通過函數(shù)free來釋放. 而sbrk則是增加數(shù)據(jù)段的大小。62 C語言中數(shù)據(jù)類型轉(zhuǎn)換原則答:數(shù)據(jù)類型轉(zhuǎn)換分為顯示轉(zhuǎn)換和隱式轉(zhuǎn)換。顯示轉(zhuǎn)換屬于強(qiáng)制類型轉(zhuǎn)換,隱式轉(zhuǎn)換屬于自動轉(zhuǎn)換。 高到低的順序給各種數(shù)據(jù)類型分等級,依次為:long double, double, float, unsigned long long, long long, unsigned long, long, unsigned int 和int,char。這是按照數(shù)據(jù)類型的表示范圍大小
56、來劃分的。 數(shù)據(jù)類型轉(zhuǎn)換存在兩種場合:一是在賦值語句中,會進(jìn)行轉(zhuǎn)換,高等級數(shù)據(jù)類型會進(jìn)行截斷或舍入操作。低等級數(shù)據(jù)類型會完整的轉(zhuǎn)換為高等級數(shù)據(jù)。二是在運(yùn)算表達(dá)式中,低等級數(shù)據(jù)類型會自動向高等級數(shù)據(jù)類型轉(zhuǎn)換,被轉(zhuǎn)換成表示范圍更大的類型,故而把這種轉(zhuǎn)換稱為“升級(promotion)”。注意:char類型可以自動轉(zhuǎn)換為int類型。char類型變量在內(nèi)存中的存儲是以一個字節(jié)的ASCII碼值來存放的,會被自動轉(zhuǎn)換為int型。當(dāng)字符串轉(zhuǎn)換為int型時,也是讀取ASCII碼值。比如字符串”aaaa”轉(zhuǎn)換為unsigned int時,因為在VS開發(fā)環(huán)境下,unsigned int占四個字節(jié),這與我們有些C教
57、科書上說的占兩個字節(jié)不同。字符a的ASCII碼值對應(yīng)的是97,二進(jìn)制表示是01100001,那么字符串”aaaa”63.堆和棧的定性理解問題是:堆與棧到底是什么,是指一塊內(nèi)存區(qū)呢,還是指一種數(shù)據(jù)結(jié)構(gòu)?答:明確說明操作系統(tǒng)(或編譯原理)的堆與棧和數(shù)據(jù)結(jié)構(gòu)的堆與棧是不同的概念。OS(Operating System)中的堆棧指的是兩塊相鄰的存儲空間,數(shù)據(jù)結(jié)構(gòu)中的堆和棧指的是不同的數(shù)據(jù)結(jié)構(gòu)。堆是完全二叉樹,按性質(zhì)是分為大頂堆或小頂堆,即父節(jié)點大于或小于左右孩子,通常用來排序或者進(jìn)行。棧的性質(zhì)則是先進(jìn)后出,通常用在臨時存儲局部結(jié)果上。64.CLR與程序集的關(guān)系與區(qū)別答:程序集:經(jīng)由編譯器編譯得到的,供CLR進(jìn)一步編譯執(zhí)行的那個中間產(chǎn)物,在WINDOWS系統(tǒng)中,它一般表現(xiàn)為。dll,或者是。exe的格式,但是要注意,它們跟普通意義上的WIN32可執(zhí)行程序是完全不同的東西,程序集必須依靠CLR才能順利執(zhí)行。 CLR: Common Language Runtime, 公共語言運(yùn)行時, 是一個可由多種編程語言使用的運(yùn)行環(huán)境。CLR的核心功能包括:內(nèi)存管理、程序集加載、安全性、異常處理和線程同步,可由面向CLR的所有語言使用。并保
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 銅山區(qū)幼兒園勞務(wù)合同
- 提前還貸后貸款合同處理
- 《堅持依法行政》課件
- 《血壓測量》課件
- 2025年岳陽貨運(yùn)資格證題庫在線練習(xí)
- 2025年來賓貨運(yùn)資格證模擬考試題庫下載
- 保障性住房交易附加條款
- 零售行業(yè)文員聘用合同樣本
- 增資擴(kuò)股協(xié)議書
- 花店攤位租賃合同
- 干、濕球溫度與濕度對照表
- HDPE管材規(guī)格表
- 維修確認(rèn)單(共4頁)
- 典型的化工操作過程安全技術(shù)
- 課堂教學(xué)問卷調(diào)查(學(xué)生).
- 挖掘機(jī)液壓系統(tǒng)講解課件
- 管道安裝工程清單價格
- 四川省普教科研資助金課題檢測報告
- 粵西茂名許氏源流考
- 關(guān)于房屋裝飾裝修價值評估的探討
- 六十仙命配二十四山吉兇選擇一覽表
評論
0/150
提交評論