一、嵌入式與單片機的區別數組
從軟件上,行業裏常常把芯片中不帶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關鍵字的做用
一、修飾通常變量和數組:修飾符可在類型說明符前,也可在類型說明符後;
二、修飾常指針: