嵌入式的面試題
無意間看到一篇博文,覺得自己也應該總結一下。就從他的基礎上面開始吧。

題目

  1. 如何在C中初始化一個字元陣列。 
  1. 如何在C中為一個陣列分配空間。 
  1. 如何初始化一個指標陣列。 
  1. 如何定義一個有10個元素的整數型指標陣列。 
  1. s[10]的另外一種表達方式是什麼。 
  1. GCC3.2.2版本中支援哪幾種編程語言。 
  1. 要使用CHAR_BIT需要包含哪個頭檔。 
  1. 對(-1.2345)取整是多少? 
  1. 如何讓局部變數具有全局生命期。 
  1. C中的常量字串應在何時定義? 
  1. 如何在兩個.c檔中引用對方的變數。 
  1. 使用malloc之前需要做什麼準備工作。 
  1. realloc函數在使用上要注意什麼問題。 
  1. strtok函數在使用上要注意什麼問題。 
  1. gets函數在使用上要注意什麼問題。 
  1. C語言的詞法分析在長度規則方面採用的是什麼策略? 
  1. a+++++b所表示的是什麼意思?有什麼問題? 
  1. 如何定義Bool變數的TRUE和FALSE的值。 
  1. C語言的const的含義是什麼。在定義常量時,為什麼推薦使用const,而不是#define。 
  1. C語言的volatile的含義是什麼。使用時會對編譯器有什麼暗示。 

解答

1. 如何在C中初始化一個字元陣列。 

這 個問題看似很簡單,但是我們要將最簡單的問題用最嚴謹的態度來對待。關鍵的地方:初始化、字元型、陣列。最簡單的方法是char array[];。這個問題看似解決了,但是在初始化上好像還欠缺點什麼,個人認為:char array[5]={'1','2','3','4','5'};或者char array[5]={"12345"};或者char array[2][10]={"China","Beijing"};也許更符合“初始化”的意思。 

2. 如何在C中為一個陣列分配空間。 

最簡單的方法是:char array[5];意思是分配給陣列array一個5個位元組的空間。但是我們要知道在C中陣列其實就是一個名字,其實質含義就是指標,比如char array[];是到底分配的多少空間?所以我們要將其分成為兩種不同的形式給出答案: 
一種是棧的形式:char array[5]; 
一種是堆的形式:char *array; array=(char *)malloc(5);//C++: array=new char[5]; 
堆和棧的含義其實我也沒弄太透徹,改天明白了再發一篇。 
我們要明白的是,第一種形式空間分配的大小可能會受作業系統的限制,比如windows會限制在2M;第二種形式成空間分配很靈活,想分配多少分配多少,只要RAM夠大。 

3. 如何初始化一個指標陣列。 

首先明確一個概念,就是指向陣列的指標,和存放指標的陣列。 
指向陣列的指標:char (*array)[5];含義是一個指向存放5個字元的陣列的指標。 
存放指標的陣列:char *array[5];含義是一個陣列中存放了5個指向字元型資料的指標。 
按照題意,我理解為初始化一個存放指標的陣列,char *array[2]={"China","Beijing"};其含義是初始化了一個有兩個指向字元型資料的指標的陣列,這兩個指標分別指向字串"China"和"Beijing"。 

4. 如何定義一個有10個元素的整數型指標陣列。 

既然只是定義而不是初始化,那就很簡單且沒有爭議了:int *array[10];。 

5. s[10]的另外一種表達方式是什麼。 

前面說過了,陣列和指標其實是資料存在形態的兩種表現形式,如果說對於陣列s[],我們知道*s=s[0],那麼s[10]的另一種表達方式就是:*(s+10)。 

6. GCC3.2.2版本中支援哪幾種編程語言。