嵌入式軟體面試題一_編程學習筆記

來源:互聯網
上載者:User

1、請寫出你所知道的C語言關鍵字。

auto :聲明自動變數

switch :用於開關語句

case:開關語句分支

break:跳出當前迴圈

default:開關語句中的“其它”分支

continue:結束當前迴圈,開始下一輪迴圈

goto:無條件跳躍陳述式

do :迴圈語句的迴圈體

while :迴圈語句的迴圈條件

if:條件陳述式

else :條件陳述式否定分支(與 if 連用)

enum :聲明枚舉類型

union:聲明共用資料類型

extern:聲明變數是在其它檔案中聲明

for:一種迴圈語句

register:聲明寄存器變數

return :子程式返回語句(可以帶參數,也可不帶參數)迴圈條件

sizeof:計算資料類型長度

static :聲明靜態變數

struct:聲明結構體變數或函數

typedef:用以給資料類型取別名

unsigned:聲明無符號類型變數或函數

void :聲明函數無傳回值或無參數,聲明無類型指標

volatile:說明變數在程式執行中可被隱含地改變

short :聲明短整型變數或函數

signed:聲明有符號類型變數或函數

char :聲明字元型變數或函數

float:聲明浮點型變數或函數

int: 聲明整型變數或函數

long :聲明長整型變數或函數

const :聲明唯讀變數

double :聲明雙精確度變數或函數

2、IPv4把所有的IP地址分為A、B、C、D、E五類。請寫出B類地址和C類地址的範圍和掩碼,D類地址的用途是什麼。

分類 首碼碼 開始地址 結束位址 對應CIDR修飾 預設子網路遮罩

A類地址 0 0.0.0.0 127.255.255.255 /8 255.0.0.0

B類地址 10 128.0.0.0 191.255.255.255 /16 255.255.0.0

C類地址 110 192.0.0.0 223.255.255.255 /24 255.255.255.0

D類地址 (群播) 1110 224.0.0.0 239.255.255.255 /4 未定義

E類地址 (保留) 1111 240.0.0.0 255.255.255.255 /4 未定義

3、請簡述在linux中多進程程式和多線程程式的區別。

4、列出目前linux系統能支援的檔案系統,列舉常用的四個以上。

Ext3 ext4 jffs2 yffs2 ubifs  cramfs

5、寫一個“標準”宏MIN,這個宏輸入兩個參數並返回較小的一個。

#define  MIN(a, b)  (  (a)  <=  (b)  :  (a)  ?  (b)  )

6、什麼是MMU,MMU的作用。

MMU是Memory Management Unit的縮寫,負責虛擬位址到物理地址的轉換,提供硬體機制的記憶體訪問授權。


7、關鍵字volatile有什麼含義,並給出幾個應用場合。

1. 定義的變數應該是異變的,防止編譯器最佳化,使得程式直接存取原始記憶體位址。

2. 中斷服務程式中修改的供其它程式檢測的變數需要加volatile。

3. 多任務環境下各任務間共用的標誌應該加volatile。

4. 儲存空間映射的硬體寄存器通常也要加voliate,因為每次對它的讀寫都可能有不同意義。

5. 頻繁地使用volatile很可能會增加代碼尺寸和降低效能。

8、雙向鏈表操作題:

/*節點定義*/

typedef srruct node

{

struct node *next;

struct node *previous;

}NODE;

/*鏈表定義*/

typedef struct

{

NODE node;

int count;

} LIST;

#define HEAD node.next

#define TALL  node.previous

/*初始化一個鏈表*/

void lstInit (LIST *pList)

{

pPlist->HEAD=NULL;

pPlist->TALL=NULL;

pPlist->count=0;

}

請編寫函數把一個節點(pNode)插入鏈表pList中某個節點(pPrev)之後。

9、請寫出strcpy 和 memcpy 的區別
1、strcpy和memcpy都是標準C庫函數。
2、strcpy提供了字串的複製。即strcpy只用於字串複製,並且它不僅複製字串內容之外,還會複製字串的結束符。
3、strcpy函數的原型是:char* strcpy(char* dest, const char* src);
4、memcpy提供了一般記憶體的複製。即memcpy對於需要複製的內容沒有限制,因此用途更廣。
5、memcpy函數的原型是:void *memcpy( void *dest, const void *src, size_t count );
strcpy和memcpy主要有以下3方面的區別。
5.1、複製的內容不同。strcpy只能複製字串,而memcpy可以複製任意內容,例如字元數組、整型、結構體、類等。
5.2、複製的方法不同。strcpy不需要指定長度,它遇到被複製字元的串結束符"\0"才結束,所以容易溢出。memcpy則是根據其第3個參數決定複製的長度。
5.3、用途不同。通常在複製字串時用strcpy,而需要複製其他類型資料時則一般用memcpy。

6、實現原型:

char   *strcpy(char* strDest, const char* strSrc)
{

if((strDest == NULL) || (strSrc == NULL)) 
  return  NULL;
  char* strDestCopy  =  strDest;

while(  ( *strDest++  =  *strSrc++ )  !=  '/0'  );

return  strDestCopy;
}

void *memcpy(void *dest, const void *src, size_t count)
{
char  *tmp = dest;
  const  char  *s  = src;

while (count--)
   *tmp++ = *s++;
  return dest;
}

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.