C語言常見問題

一、嵌入式與單片機的區別數組

從軟件上,行業裏常常把芯片中不帶MMU(Memory  Management  Unit內存管理單元)從而不支持虛擬地址,只能裸奔或運行RTOS(實時操做系統,例如ucos、華爲LiteOS、RT-Thread、FreeRTOS)的system,叫作單片機(例如STM3二、NXP)函數

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

 

二、Heap(堆)和Stack(棧)的區別操作系統

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

 

三、全局變量和局部變量的區別code

一、做用域不一樣:全局變量做用域爲整個程序,局部變量的做用域爲當前語句塊;對象

二、內存存儲方式:全局變量在全局數據區(靜態數據區),局部變量存儲在棧上;blog

三、生命週期不一樣:全局變量的生命週期和程序週期同樣,局部變量隨着語句塊的結束而結束;生命週期

四、當局部變量和全局變量同名時,優先使用局部變量,使用全局變量是要用域成員運算符;內存

 

四、結構體和聯合體的區別

一、結構體和聯合體都是由不一樣的數據類型組成,但在任什麼時候候,聯合體只存在一個被選中的成員,結構體的全部成員都存在;

二、在結構體中,各成員佔有本身的存儲空間,總大小等於各成員的大小之和;

三、在聯合體中,全部成員共用一塊存儲空間,其大小等於聯合體中最大成員的大小;

 

五、數組和指針的區別

一、指針要麼在靜態存儲區,要麼在棧上被建立。數組名對應着一塊內存,其容量與地址在生命週期內保持不變;

二、指針能夠隨時指向任意類型的內存塊,它的特徵是可變,比數組靈活,但也危險;

 

六、指針函數和函數指針的區別

一、指針函數是一個函數,它返回值是一個指針;

二、函數指針是一個指針,這個指針所指的對象是一個函數;

 

七、常量與變量的區別

一、常量是隻讀不可寫,變量可讀可寫;

二、常量必須初始化,變量能夠不初始化;

三、常量不能夠尋址,它的地址不可賦給很是量指針,變量能夠尋址;

 

八、指針自增自減與變量自增自減有什麼區別

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

 

九、#error的做用是什麼

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

 

十、#include <file.h> 與#include 「file.h」有什麼區別

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

頭文件中的 ifdef /define    endif的做用:防止頭文件被重複引用。

 

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

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

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

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

四、指針   if(p == NULL)建議使用,強調p爲指針;不建議if(p == 0)會讓人誤解爲int類型

 

十一、用#define實現宏並求最大值最小值

 

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

 

十二、break語句與continue語句有什麼區別

continue語句只能出如今循環語句中,表示結束本次循環;break語句還能夠出如今switch語句中,表示結束switch語句。在循環語句內表示結束整個循環。

 

1三、static關鍵字的做用

一、用於全局變量:表示該變量是靜態全局變量。做用域爲當前文件;

二、用於函數:該函數爲靜態函數,只能在本文件中調用。靜態函數在內存中只有一份,普通函數在內存中維持一份拷貝;

三、用做局部變量:爲靜態局部變量,只初始化一次。以後調用函數都是上次函數退出時的值。即改變變量的生存週期爲整個程序運行的時間段內;

四、static成員函數:表示這個函數屬於此類而不屬於此類的任何對象,不能訪問非靜態變量和函數,該函數在該類中是惟一的。

 

1四、const關鍵字的做用

一、修飾通常變量和數組:修飾符可在類型說明符前,也可在類型說明符後;

二、修飾常指針:

相關文章
相關標籤/搜索