• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            chaosuper85

            C++博客 首頁 新隨筆 聯系 聚合 管理
              118 Posts :: 0 Stories :: 3 Comments :: 0 Trackbacks
             

            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。str1str2都是字符數組,每個都有其自己的存儲區,它們的值則是各存儲區首地址,不等;str3str4同上,只是按const語義,它們所指向的數據區不能修改。str5str6并非數組而是字符指針,并不分配存儲區,其后的“abc”以常量形式存于靜態數據區,而它們自己僅是指向該區首地址的指針,相等。

            2. 以下代碼中的兩個sizeof用法有問題嗎?
            void UpperCase( char str[] ) //
            str 中的小寫字母轉換成大寫字母
            {
            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
            字符長度為: " << sizeof(str)/sizeof(str[0]) << endl;
            UpperCase( str );
            cout << str << endl;

            答:函數內的sizeof有問題。根據語法,sizeof如用于數組,只能測出靜態數組的大小,無法檢測動態分配的或外部數組大小。函數外的str是一個靜態定義的數組,因此其大小為6,函數內的str實際只是一個指向字符串的指針,沒有任何額外的與數組相關的信息,因此sizeof作用于上只將其當指針看,一個指針為4個字節,因此返回4。

            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);
            a.fun();
            Test b();
            b.fun();
            }

            答:變量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非編譯器期間常量,而數組定義要求長度必須為編譯期常量。

            7. 以下反向遍歷array數組的方法有什么錯誤?
            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數組
            {
            cout << array[i] << endl;
            }

            答:首先數組定義有誤,應加上類型參數:vector<int> array。其次vector::size_type被定義為unsigned int,即無符號數,這樣做為循環變量的i0時再減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; //
            輸出什么?

            答:分別輸出falsetrue。注意轉換的應用。(int)a實際上是以浮點數a為參數構造了一個整型數,該整數的值是1,(int&)a則是告訴編譯器將a當作整數看(并沒有做任何實質上的轉換)。因為1以整數形式存放和以浮點形式存放其內存數據是不一樣的,因此兩者不等。對b的兩種轉換意義同上,但是0的整數形式和浮點形式其內存數據是一樣的,因此在這種特殊情形下,兩者相等(僅僅在數值意義上)。
            注意,程序的輸出會顯示(int&)a=1065353216,這個值是怎么來的呢?前面已經說了,1以浮點數形式存放在內存中,按ieee754規定,其內容為0x0000803F(已考慮字節反序)。這也就是a這個變量所占據的內存單元的值。當(int&)a出現時,它相當于告訴它的上下文:把這塊地址當做整數看待!不要管它原來是什么。這樣,內容0x0000803F按整數解釋,其值正好就是1065353216(十進制數)。
            通過查看匯編代碼可以證實“(int)a相當于重新構造了一個值等于a的整型數之說,而(int&)的作用則僅僅是表達了一個類型信息,意義在于為cout<<==選擇正確的重載版本。

            11. 以下代碼有什么問題?
            typedef vector IntArray;
            IntArray array;
            array.push_back( 1 );
            array.push_back( 2 );
            array.push_back( 2 );
            array.push_back( 3 );
            //
            刪除array數組中所有的2
            for( IntArray::iterator itor=array.begin(); itor!=array.end(); ++itor )
            {
            if( 2 == *itor ) array.erase( itor );
            }

            答:同樣有缺少類型參數的問題。另外,每次調用“array.erase( itor );”,被刪除元素之后的內容會自動往前移,導致迭代漏項,應在刪除一項后使itor--,使之從已經前移的下一個元素起繼續遍歷。

            12.
            寫一個函數,完成內存之間的拷貝。[考慮問題是否全面]
            答:
            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;
            }

             

            posted on 2009-08-03 12:14 chaosuper 閱讀(99) 評論(0)  編輯 收藏 引用
            国产农村妇女毛片精品久久| 久久人人爽人人爽人人片AV麻豆| 久久久噜噜噜久久中文字幕色伊伊| 成人精品一区二区久久久| 亚洲AV日韩精品久久久久久| 精品久久久久久久久中文字幕| 久久成人精品| 久久久久久夜精品精品免费啦| 久久播电影网| 久久一日本道色综合久久| 日日狠狠久久偷偷色综合0| 欧美亚洲国产精品久久蜜芽| 久久久久国产精品人妻| 国产精品丝袜久久久久久不卡| 久久亚洲精品成人AV| 久久性精品| 精品久久久久久国产牛牛app | 亚洲国产精品无码久久| 久久精品无码一区二区日韩AV| 久久人人妻人人爽人人爽| 久久久久久综合网天天| 国产99久久久国产精品~~牛| 久久久久亚洲av无码专区导航 | 超级碰碰碰碰97久久久久| 91精品国产91久久久久福利| 亚洲?V乱码久久精品蜜桃| 91精品国产综合久久四虎久久无码一级 | 亚洲精品乱码久久久久久按摩| 久久丝袜精品中文字幕| 亚洲综合婷婷久久| 久久久久夜夜夜精品国产| 国产精品久久久天天影视| av无码久久久久久不卡网站| 亚洲αv久久久噜噜噜噜噜| 久久亚洲国产成人精品性色| 熟妇人妻久久中文字幕| 久久婷婷成人综合色综合| 久久99热这里只有精品国产| 欧美亚洲日本久久精品| 欧美日韩精品久久久久| 久久偷看各类wc女厕嘘嘘|