中文字幕理论片,69视频免费在线观看,亚洲成人app,国产1级毛片,刘涛最大尺度戏视频,欧美亚洲美女视频,2021韩国美女仙女屋vip视频

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
C 筆試題(一)

        進(jìn)入六月了,四年的大學(xué)生活已接近了尾聲,喜悅、流戀、憂郁,抑或迷茫、惆悵,不管是一個(gè)怎樣的心緒,我用憂郁的眼神審視著周圍的一切,變的冷漠??? 瀟灑的活著,卻絲毫感受不到快樂。浮躁,這個(gè)詞估計(jì)可以很好的來形容現(xiàn)在的我.

       牢騷了很多,和c 當(dāng)然沒有半毛錢的關(guān)系,本來快畢業(yè)了,也沒有什么事情可干,只需要享受這僅剩的時(shí)光即可,可我為了換工作,還得去看看這些瑣碎的知識(shí) ,為了筆試。下面多數(shù)是我在網(wǎng)上找的題,通過運(yùn)行調(diào)試,弄明白了,所以放在這里共大家一起學(xué)習(xí),如有錯(cuò)誤還請(qǐng)指正。還有牢騷太多還望包涵。

1. 以下四條輸出語句分別輸出什么?
char str1[] = "abc";
char str2[] = "abc";
const char str3[] = "abc";
const char str4[] = "abc";
const char* str5 = "abc";
const char* str6 = "abc";

cout<<ends<<str1<<ends<<str3<<ends<<str5<<endl;
cout << boolalpha << ( str1==str2 ) << endl; //
cout << boolalpha << ( str3==str4 ) << endl; //
cout << boolalpha << ( str5==str6 ) << endl; //

答:輸出結(jié)果是:abc abc abc    false false true;str1str2都是字符數(shù)組,每個(gè)都有其自己的存儲(chǔ)區(qū),它們的值則是各存儲(chǔ)區(qū)首地址,不等;str3str4同上,只是按const語義,它們所指向的數(shù)據(jù)區(qū)不能修改。str5str6并非數(shù)組而是字符指針,并不分配存儲(chǔ)區(qū),其后的“abc”以常量形式存于靜態(tài)數(shù)據(jù)區(qū),而它們自己僅是指向該區(qū)首地址的指針,相等。

2. 以下代碼中的兩個(gè)sizeof用法有問題嗎?
void UpperCase( char str[] ) // 將str 中的小寫字母轉(zhuǎn)換成大寫字母
{
     for( size_t i=0; i<sizeof(str)/sizeof(str[0]); i )
     {
         if( 'a'<=str[i] && str[i]<='z' )
         {
              str[i] -= ('a'-'A' );
         }
     }
}
char str[] = "aBcDe";
cout << "str字符長(zhǎng)度為: " << sizeof(str)/sizeof(str[0]) << endl;
UpperCase( str );
cout << str << endl;

答:輸出結(jié)果是:6,ABCDe;函數(shù)內(nèi)的sizeof有問題。sizeof如用于數(shù)組,只能測(cè)出靜態(tài)數(shù)組的大小,無法檢測(cè)動(dòng)態(tài)分配的或外部數(shù)組大小。函數(shù)外的str是一個(gè)靜態(tài)定義的數(shù)組,因此其字符長(zhǎng)度是6,函數(shù)內(nèi)的str實(shí)際只是一個(gè)指向字符串的指針,沒有任何額外的與數(shù)組相關(guān)的信息,因此sizeof作用于上只將其當(dāng)指針看,一個(gè)指針為4個(gè)字節(jié),因此在函數(shù)中,只轉(zhuǎn)換了前四個(gè)字符。

3. 以下代碼有什么問題?

struct Test

{

     Test( int ) {}

     Test() {}

     void fun() {}

};

void main( void )

{

     Test a(1);

     a.fun();

     Test b();

     b.fun();

}

答:變量b定義出錯(cuò)。按默認(rèn)構(gòu)造函數(shù)定義對(duì)象,不需要加括號(hào)。C/C 中的結(jié)構(gòu)和類的區(qū)別很小,只不過一個(gè)是值類型,一個(gè)是引用類型,而且缺省Public、Private等修飾符時(shí),結(jié)構(gòu)默認(rèn)是公共的,類默認(rèn)是私有的。

4.在下面的語句中錯(cuò)誤的是 :
A、int n=5;        int y[n]
B、const int n=5;    int y[n]
C、in n=5;         int *py=new int[n];
D、const int n=5;    int *py=new int[n]

答:A, 數(shù)組在聲明的時(shí)候大小必須是固定的,但是在A里面n是一個(gè)變量;即在程序執(zhí)行時(shí)會(huì)去找n的值,因?yàn)閚=5;不是常量,此時(shí)n的值是默認(rèn)的0,因此會(huì)拋出不能分配常量大小為零的數(shù)組的錯(cuò)誤。

5. 以下代碼有什么問題?

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

答:三元操作符?:后面的兩個(gè)操作數(shù)必須是同一類型。

6. 以下代碼能夠編譯通過嗎,為什么?

unsigned int const size1 = 2;

char str1[ size1 ];

unsigned int temp = 0;

cin >> temp;

unsigned int const size2 = temp;

char str2[ size2 ];

答:str2定義出錯(cuò),size2不是編譯期間常量,而而數(shù)組的定義要求數(shù)組長(zhǎng)度必須為編譯期常量。

7. 以下反向遍歷array數(shù)組的方法有什么錯(cuò)誤?

vector array;

array.push_back( 1 );

array.push_back( 2 );

array.push_back( 3 );

for( vector::size_type i=array.size()-1; i>=0; --i ) // 反向遍歷array數(shù)組

{

     cout << array[i] << endl;

}

答:首先Vector的聲明應(yīng)指明數(shù)據(jù)類型,如:vector<int> array,vector<int>::size_type ;其次,size_type類型為unsigned int 類型,當(dāng)i=0時(shí),減一變成-1,進(jìn)而轉(zhuǎn)換成很大的數(shù),使數(shù)組不可控。

8. 以下代碼中的輸出語句輸出嗎,為什么?

struct CLS

{

     int m_i;

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

     CLS()

     {

         CLS(0);

     }

};

CLS obj;

cout << obj.m_i << endl;

答:不能。在默認(rèn)構(gòu)造函數(shù)內(nèi)部再調(diào)用帶參的構(gòu)造函數(shù)屬用戶行為而非編譯器行為,亦即僅執(zhí)行函數(shù)調(diào)用,而不會(huì)執(zhí)行其后的初始化表達(dá)式。只有在生成對(duì)象時(shí),初始化表達(dá)式才會(huì)隨相應(yīng)的構(gòu)造函數(shù)一起調(diào)用。

9. C 中的空類,默認(rèn)產(chǎn)生哪些類成員函數(shù)?

答:

class Empty
{
public:
     Empty();                // 缺省構(gòu)造函數(shù)
     Empty( const Empty& );  // 拷貝構(gòu)造函數(shù)
     ~Empty();               // 析構(gòu)函數(shù)
     Empty& operator=( const Empty& );  // 賦值運(yùn)算符
     Empty* operator&();                // 取址運(yùn)算符
     const Empty* operator&() const;    // 取址運(yùn)算符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。注意轉(zhuǎn)換的應(yīng)用。(int)a實(shí)際上是以浮點(diǎn)數(shù)a為參數(shù)構(gòu)造了一個(gè)整型數(shù),該整數(shù)的值是,(int&)a則是告訴編譯器將a當(dāng)作整數(shù)看(并沒有做任何實(shí)質(zhì)上的轉(zhuǎn)換)。因?yàn)橐哉麛?shù)形式存放和以浮點(diǎn)形式存放其內(nèi)存數(shù)據(jù)是不一樣的,因此兩者不等。對(duì)b的兩種轉(zhuǎn)換意義同上,但是的整數(shù)形式和浮點(diǎn)形式其內(nèi)存數(shù)據(jù)是一樣的,因此在這種特殊情形下,兩者相等(僅僅在數(shù)值意義上)。
  注意,程序的輸出會(huì)顯示(int&)a=1065353216,這個(gè)值是怎么來的呢?前面已經(jīng)說了,以浮點(diǎn)數(shù)形式存放在內(nèi)存中,按ieee754規(guī)定,其內(nèi)容為x0000803F(已考慮字節(jié)反序)。這也就是a這個(gè)變量所占據(jù)的內(nèi)存單元的值。當(dāng)(int&)a出現(xiàn)時(shí),它相當(dāng)于告訴它的上下文:“把這塊地址當(dāng)做整數(shù)看待!不要管它原來是什么?!边@樣,內(nèi)容x0000803F按整數(shù)解釋,其值正好就是(十進(jìn)制數(shù))。
  通過查看匯編代碼可以證實(shí)“(int)a相當(dāng)于重新構(gòu)造了一個(gè)值等于a的整型數(shù)”之說,而(int&)的作用則僅僅是表達(dá)了一個(gè)類型信息,意義在于為cout<<及==選擇正確的重載版本。

11. 以下代碼有什么問題?

typedef vector IntArray;

IntArray array;

array.push_back( 1 );

array.push_back( 2 );

array.push_back( 2 );

array.push_back( 3 );

// 刪除array數(shù)組中所有的2

for( IntArray::iterator itor=array.begin(); itor!=array.end(); itor )

{

     if( 2 == *itor ) array.erase( itor );

}

答:同樣,定義時(shí)沒有指明參數(shù)類型,而且在執(zhí)行array.erase(itor)后,會(huì)自動(dòng)前移,這樣就會(huì)漏掉迭代項(xiàng)。

12. 寫一個(gè)函數(shù),完成內(nèi)存之間的拷貝。[考慮問題是否全面]

void* mymemcpy( void *dest, const void *src, size_t count )
{
     char* pdest = static_cast<char*>( dest );
     const char* psrc = static_cast<const char*>( src );
     if( pdest>psrc && pdest<psrc cout ) // 能考慮到這種情況就行了
     {
         for( size_t i=count-1; i!=-1; --i )
              pdest[i] = psrc[i];
     }
     else
     {
         for( size_t i=0; i<count; i )
              pdest[i] = psrc[i];
     }
     return dest;
}

void main( void )
{

 char str[] = "0123456789";
    mymemcpy( str 1, str 0, 9 );
    cout << str << endl;

        mymemcpy( str, str 5, 5 );
    cout << str << endl;

    system( "Pause" );

}

看到這個(gè)拷貝函數(shù)的運(yùn)行結(jié)果后,對(duì)c 指針不是很熟悉的可能看不太明白,以主函數(shù)中的輸出為例,我來發(fā)表一下自己的一點(diǎn)理解吧,如有錯(cuò)誤歡迎指正。

第一次調(diào)用函數(shù)mymemcpy( str 1, str 0, 9 ); 時(shí),str 1 傳入的是從字符"1"地址開始的指針地址,而str 0 傳入的是指針數(shù)組str的首地址指針,進(jìn)入函數(shù)內(nèi)部以后,兩個(gè)參數(shù)就和外部的指針數(shù)組str基本脫離了關(guān)系,轉(zhuǎn)換成字符指針后,dest是"123456789",src是"0123456789"因?yàn)榈刂肥墙徊娴?,所以拷貝?nèi)存時(shí),執(zhí)行if內(nèi)語句,這樣dest字符就變成了012345678,因?yàn)閐est和str指向的是同一塊內(nèi)存空間,而str從1地址開始變成了012345678,加上其原本首地址 0不變,所以輸出str時(shí)變成0012345678。如果不太明白可以看下另一篇日志,內(nèi)存拷貝函數(shù),應(yīng)該能很好的理解。


 

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
c++知識(shí) - 洋男的日志 - 網(wǎng)易博客
C++經(jīng)典面試題
string中c_str()、data()、copy(p,n)函數(shù)的用法
最全的C\C 面試題解(2)
285-304
C++指針
更多類似文章 >>
生活服務(wù)
熱點(diǎn)新聞
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服