當前位置:學者齋 >

IT認證 >嵌入式 >

2016最新嵌入式筆試題及答案

2016最新嵌入式筆試題及答案

嵌入式系統是軟體和硬體的綜合體,還可以涵蓋機械等附屬裝置。那麼嵌入式考試筆試的試題你做了嗎?下面跟yjbys小編一起來看看吧!

2016最新嵌入式筆試題及答案

1. 以下三條輸出語句分別輸出什麼?

char str1[] = "abc";

char str2[] = "abc";

const char str3[] = "abc";

const char str4[] = "abc";

const char* str5 = "abc";

const char* str6 = "abc";

cout << boolalpha << ( str1==str2 ) << endl; // 輸出什麼?

cout << boolalpha << ( str3==str4 ) << endl; // 輸出什麼?

cout << boolalpha << ( str5==str6 ) << endl; // 輸出什麼?

答:分別輸出false,false,true。str1和str2都是字元陣列,每個都有其自己的儲存區,它們的值則是各儲存區首地址,不等;str3和str4同上,只是按const語義,它們所指向的資料區不能修改。str5和str6並非陣列而是字元指標,並不分配儲存區,其後的“abc”以常量形式存於靜態資料區,而它們自己僅是指向該區首地址的指標,相等。

3. 非C++內建型別 A 和 B,在哪幾種情況下B能隱式轉化為A?

答:

a. class B : public A { ……} // B公有繼承自A,可以是間接繼承的

b. class B { operator A( ); } // B實現了隱式轉化為A的轉化

c. class A { A( const B& ); } // A實現了non-explicit的引數為B(可以有其他帶預設值的引數)建構函式

d. A& operator= ( const A& ); // 賦值操作,雖不是正宗的隱式型別轉換,但也可以勉強算一個

4. 以下程式碼有什麼問題?

struct Test

{

Test( int ) {}

Test() {}

void fun() {}

};

void main( void )

{

Test a(1);

();

Test b();

();

}

答:變數b定義出錯。按預設建構函式定義物件,不需要加括號。

5. 以下程式碼有什麼問題?

cout << (true?1:"1") << endl;

答:三元表示式“?:”問號後面的兩個運算元必須為同一型別。

6. 以下程式碼能夠編譯通過嗎,為什麼?

unsigned int const size1 = 2;

char str1[ size1 ];

unsigned int temp = 0;

cin >> temp;

unsigned int const size2 = temp;

char str2[ size2 ];

答:str2定義出錯,size2非編譯器期間常量,而陣列定義要求長度必須為編譯期常量。

During my test in linux environment. The above code could be compiled successfully. But if we initialize the defined arrary like this “char str2[ size2 ] = {0};”, there would be a compile error informing that “variable-sized object `str2' may not be initialized”.

7. 以下反向遍歷array陣列的方法有什麼錯誤?

vector array;

_back( 1 );

_back( 2 );

_back( 3 );

for( vector::size_type i=()-1; i>=0; --i ) // 反向遍歷array陣列

{

cout << array[i] << endl;

}

答:首先陣列定義有誤,應加上型別引數:vector array。其次vector::size_type被定義為unsigned int,即無符號數,這樣做為迴圈變數的i為0時再減1就會變成最大的整數,導致迴圈失去控制。

8. 以下程式碼中的輸出語句輸出0嗎,為什麼?

struct CLS

{

int m_i;

CLS( int i ) : m_i(i) {}

CLS()

{

CLS(0);

}

};

CLS obj;

cout << obj.m_i << endl;

答:不能。在預設建構函式內部再呼叫帶參的建構函式屬使用者行為而非編譯器行為,亦即僅執行函式呼叫,而不會執行其後的初始化表示式。只有在生成物件時,初始化表示式才會隨相應的建構函式一起呼叫。

9. C++中的空類,預設產生哪些類成員函式?

答:

class Empty

{

public:

Empty(); // 預設建構函式

Empty( const Empty& ); // 拷貝建構函式

~Empty(); // 解構函式

Empty& operator=( const Empty& ); // 賦值運算子

Empty* operator&(); // 取址運算子

const Empty* operator&() const; // 取址運算子 const

};

10. 以下兩條輸出語句分別輸出什麼?

float a = 1.0f;

cout << (int)a << endl;

cout << (int&)a << endl;

cout << boolalpha << ( (int)a == (int&)a ) << endl; // 輸出什麼?

float b = 0.0f;

cout << (int)b << endl;

cout << (int&)b << endl;

cout << boolalpha << ( (int)b == (int&)b ) << endl; // 輸出什麼?

答:分別輸出false和true。注意轉換的應用。(int)a實際上是以浮點數a為引數構造了一個整型數,該整數的值是1,(int&)a則是告訴編譯器將a當作整數看(並沒有做任何實質上的轉換)。因為1以整數形式存放和以浮點形式存放其記憶體資料是不一樣的,因此兩者不等。對b的兩種轉換意義同上,但是0的整數形式和浮點形式其記憶體資料是一樣的,因此在這種特殊情形下,兩者相等(僅僅在數值意義上)。

標籤: 題及 嵌入式 筆試
  • 文章版權屬於文章作者所有,轉載請註明 https://xuezhezhai.com/zh-tw/itrz/qianrushi/omznrn.html