日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

C語言常見問題

 路人甲Java 2021-05-03

1、嵌入式與單片機的區(qū)別

從軟件上,行業(yè)里經(jīng)常把芯片中不帶MMU(Memory  Management  Unit內(nèi)存管理單元)從而不支持虛擬地址,只能裸奔或運行RTOS(實時操作系統(tǒng),例如ucos、華為LiteOS、RT-Thread、FreeRTOS)的system,叫做單片機(例如STM32、NXP)

而把芯片自帶MMU可以支持虛擬地址,能夠跑Linux、Vxworks、WinCE、Android這樣的“高級”的system,叫做嵌入式

 

2、Heap(堆)和Stack(棧)的區(qū)別

Heap(堆)上的空間是手動分配和釋放的,Stack(棧)上的空間是自動分配和釋放的

 

3、全局變量和局部變量的區(qū)別

1、作用域不同:全局變量作用域為整個程序,局部變量的作用域為當前語句塊;

2、內(nèi)存存儲方式:全局變量在全局數(shù)據(jù)區(qū)(靜態(tài)數(shù)據(jù)區(qū)),局部變量存儲在棧上;

3、生命周期不同:全局變量的生命周期和程序周期一樣,局部變量隨著語句塊的結(jié)束而結(jié)束;

4、當局部變量和全局變量同名時,優(yōu)先使用局部變量,使用全局變量是要用域成員運算符;

 

4、結(jié)構(gòu)體和聯(lián)合體的區(qū)別

1、結(jié)構(gòu)體和聯(lián)合體都是由不同的數(shù)據(jù)類型組成,但在任何時候,聯(lián)合體只存在一個被選中的成員,結(jié)構(gòu)體的所有成員都存在;

2、在結(jié)構(gòu)體中,各成員占有自己的存儲空間,總大小等于各成員的大小之和;

3、在聯(lián)合體中,所有成員共用一塊存儲空間,其大小等于聯(lián)合體中最大成員的大小;

 

5、數(shù)組和指針的區(qū)別

1、指針要么在靜態(tài)存儲區(qū),要么在棧上被創(chuàng)建。數(shù)組名對應(yīng)著一塊內(nèi)存,其容量與地址在生命周期內(nèi)保持不變;

2、指針可以隨時指向任意類型的內(nèi)存塊,它的特征是可變,比數(shù)組靈活,但也危險;

 

6、指針函數(shù)和函數(shù)指針的區(qū)別

1、指針函數(shù)是一個函數(shù),它返回值是一個指針;

2、函數(shù)指針是一個指針,這個指針所指的對象是一個函數(shù);

 

7、常量與變量的區(qū)別

1、常量是只讀不可寫,變量可讀可寫;

2、常量必須初始化,變量可以不初始化;

3、常量不可以尋址,它的地址不可賦給非常量指針,變量可以尋址;

 

8、指針自增自減與變量自增自減有什么區(qū)別

指針自增自減是改變指針所指的對象;變量自增自減是改變變量的值。

 

9、#error的作用是什么

編譯程序時,只要遇到#error就會跳出一個編譯錯誤

 

10、#include <file.h> 與#include “file.h”有什么區(qū)別

#include <file.h> 表示該文件存在編譯器指定的標準頭文件存放處;#include “file.h”表示該文件在用戶當前的工作目錄下

頭文件中的 ifdef /define    endif的作用:防止頭文件被重復(fù)引用。

 

10、常見的條件語句比較寫法

1、bool類型  if(flag)建議使用

2、int類型  if(value  !=  0)建議使用 

3、float   if( x  > -EPSION &&   x  < EPSION )建議使用

4、指針   if(p == NULL)建議使用,強調(diào)p為指針;不建議if(p == 0)會讓人誤解為int類型

 

11、用#define實現(xiàn)宏并求最大值最小值

 

#define    MAX(x,y)    ((x)>(y))?(x):(y) 
#define    MIN(x,y)    ((x)<(y))?(x):(y) 

 

12、break語句與continue語句有什么區(qū)別

continue語句只能出現(xiàn)在循環(huán)語句中,表示結(jié)束本次循環(huán);break語句還可以出現(xiàn)在switch語句中,表示結(jié)束switch語句。在循環(huán)語句內(nèi)表示結(jié)束整個循環(huán)。

 

13、static關(guān)鍵字的作用

1、用于全局變量:表示該變量是靜態(tài)全局變量。作用域為當前文件;

2、用于函數(shù):該函數(shù)為靜態(tài)函數(shù),只能在本文件中調(diào)用。靜態(tài)函數(shù)在內(nèi)存中只有一份,普通函數(shù)在內(nèi)存中維持一份拷貝;

3、用作局部變量:為靜態(tài)局部變量,只初始化一次。之后調(diào)用函數(shù)都是上次函數(shù)退出時的值。即改變變量的生存周期為整個程序運行的時間段內(nèi);

4、static成員函數(shù):表示這個函數(shù)屬于此類而不屬于此類的任何對象,不能訪問非靜態(tài)變量和函數(shù),該函數(shù)在該類中是唯一的。

 

14、const關(guān)鍵字的作用

1、修飾一般變量和數(shù)組:修飾符可在類型說明符前,也可在類型說明符后;

2、修飾常指針:

const修飾指針指向的對象,指針可變,指針指向的對象不變

const  int  *A;

 

const修飾指針指向的對象,指針可變,指針指向的對象不變

int const  *A;

 

const修飾指針,指針不可變,指針指向的對象可變

int * const  A;

 

 

15、const與宏的區(qū)別

1、編譯時刻:宏在預(yù)編譯時刻,const在編譯時刻;

2、編譯檢查:宏不會編譯檢查,const有編譯檢查

3、宏可以定義函數(shù)、方法等,const不可以

4、大量使用宏會導(dǎo)致預(yù)編譯時間過長

 

16、帶參宏與函數(shù)的區(qū)別

1、處理時刻不同:宏在編譯時刻,函數(shù)在運行時刻;

2、帶參宏沒有參數(shù)類型,函數(shù)具有參數(shù)類型;

3、帶參宏不分配內(nèi)存,函數(shù)需要分配內(nèi)存;

4、宏不占用運行時間,函數(shù)在調(diào)用時刻和返回時刻占用時間;

 

17、引用與指針的區(qū)別

1、非空區(qū)別:指針可以指向NULL,引用必須指向某個對象;

2、可修改區(qū)別:指針可以指向不同的對象,引用總是指向初始化的對象;

3、合法性區(qū)別:在使用指針之前要判斷指針是否為NULL,引用不需要判斷;

 

 

18、malloc()與colloc()的區(qū)別

1、malloc()與colloc()都是在堆上申請動態(tài)內(nèi)存空間;

2、malloc()只有一個參數(shù),即要分配內(nèi)存大??;

3、colloc()函數(shù)有兩個參數(shù),分別是元素的個數(shù)與元素的大??;

4、malloc()不能對內(nèi)存初始化,colloc()對內(nèi)存的每一位初始化為0;

 

19、strcpy 、sprint、 memcpy函數(shù)的區(qū)別

 

strcpy 函數(shù)操作的對象是字符串,完成從源字符串到目的字符串的拷貝;

sprint函數(shù)操作的對象不限于字符串,是實現(xiàn)其他數(shù)據(jù)類型吸納高字符串的轉(zhuǎn)化。方法中需要指定數(shù)據(jù)源對象的數(shù)據(jù)類型,如果源對象是字符串,也可以實現(xiàn)字符串的拷貝功能。

memcpy內(nèi)存的拷貝,實現(xiàn)將一個內(nèi)存的內(nèi)容復(fù)制到另一個內(nèi)存塊,內(nèi)存塊由首地址及長度決定。

 

20、strcpy函數(shù)為什么要返回char *類型

增加代碼的靈活性,方便其他函數(shù)直接調(diào)用

 

21、new  delete與malloc  free的聯(lián)系與區(qū)別

1、都是在堆上進行動態(tài)內(nèi)存的分配與釋放;

2、new  delete是C++的運算符,malloc  free是函數(shù);

3、new會自動調(diào)用對象的構(gòu)造函數(shù),返回相應(yīng)的類型;

4、malloc只會申請指定大小的內(nèi)存,返回void *類型,不能初始化對象;

5、delete與new配對,會調(diào)用析構(gòu)函數(shù);

6、free與malloc配對,只是內(nèi)存的釋放,不會調(diào)用析構(gòu)函數(shù);

 

22、關(guān)于靜態(tài)內(nèi)存的分配和動態(tài)內(nèi)存的分配的區(qū)別及過程

1、靜態(tài)內(nèi)存的分配是在編譯時刻完成的,不占CPU資源。動態(tài)內(nèi)存的分配是在運行時刻完成的,分配與釋放占用CPU運行時間;

2、靜態(tài)內(nèi)存分配是在棧上完成的,動態(tài)內(nèi)存分配是在堆上完成的;

3、動態(tài)內(nèi)存分配需要指針或引用數(shù)據(jù)類型的支持,而靜態(tài)內(nèi)存分配不需要;

4、靜態(tài)內(nèi)存的分配是按照計劃分配的,在編譯前確定內(nèi)存塊的大??;動態(tài)內(nèi)存分配運行時按需分配;

5、靜態(tài)內(nèi)存分配是把內(nèi)存的控制權(quán)交給了編譯器;動態(tài)內(nèi)存分配是把內(nèi)存的分配交給了程序員;

6、靜態(tài)內(nèi)存分配的效率比動態(tài)分配內(nèi)存的效率高,因為動態(tài)內(nèi)存的分配與釋放需要額外的開銷;動態(tài)內(nèi)存管理水平,嚴重依賴于程序員的水平,處理不當容易造成內(nèi)存泄漏;

 

23、一個短小的函數(shù)在C與C++中分別用什么實現(xiàn)

在C中用宏實現(xiàn),在C++中用內(nèi)聯(lián)函數(shù)實現(xiàn)

 

24、在C++程序中調(diào)用被C編譯器編譯后的函數(shù),為什么要加extern C

C++語言支持函數(shù)的重載,C語言不支持函數(shù)的重載,編譯后參數(shù)的名字不同,函數(shù)被C++編譯器編譯后產(chǎn)生的名字為函數(shù)名加參數(shù)列表類型名之類的名字。

而C編譯器編譯后產(chǎn)生的名字為函數(shù)名。

 

25、一個由C/C++編譯器編譯過的程序由哪幾部分組成

1、棧區(qū):由編譯器自動編譯、釋放、存儲函數(shù)參數(shù)的值、局部變量的值等,其操作方式類似于數(shù)據(jù)結(jié)構(gòu);

2、堆區(qū):由程序員分配與釋放,如果程序員沒有釋放,在程序結(jié)束時由OS釋放,存儲結(jié)構(gòu)類似于鏈表;

3、全局變量和靜態(tài)變量存儲在一起

4、文字常量區(qū):常量、字符串存放于此,程序結(jié)束后自動釋放;

5、程序代碼區(qū):存放函數(shù)的二進制代碼

 

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多