《C/C++專項練習》 — (3)

來源:互聯網
上載者:User

標籤:c++

第三次C/C++專項,嗯,要抗住打擊,繼續加油~

錯題分析與總結

1 . 在64位系統中,有如下類:

class A{public:    void *p1;private:    void *p2;protected:    void *p3;};class B: public A {};

那麼sizeof(B)的數值是?

A . 8
B . 16
C . 24
D . 32

分析: 在32位系統中,指標佔4個位元組,而在64位系統中,指標佔8個位元組,且都有位元組對齊規則;題目中定義類A中有3個指標,故會佔用24個位元組。B類繼承自類A且無成員變數和虛函數表,佔用位元組和A相同。
需要注意的是,對於類的繼承,父類中的私人成員子類不能訪問時是編譯器的行為,但是其在子類中是存在的,所以同樣佔用空間,可以通過指標對記憶體的操作來訪問。

答案: C

總結:錯選了B , 錯誤的把指標的佔用按照4個位元組計算,考慮了8位元組對齊,就得到了16位元組的錯誤結果。

2 . 在int b[ ][3] = {{1},{3,2},{4,5,6},{0}};中,sizeof(b) = ?

A . 4
B . 12
C . 28
D . 48

分析: 題目中定義的是int類型的二維數組,int類型變數佔用4個位元組,每行則佔用3 * 4 = 12 位元組;而二維數組有4行,故sizeof(B) = 4 * 12 = 48 位元組。

答案: D

總結: 錯選A,究其原因還是對sizeof操作符功能的瞭解不透徹,錯誤的認為其為求首地址的大小。關於sizeof關鍵字,百科的內容很是詳細,sizeof百科內容。

3 . 當一個類A 中沒有聲明任何成員變數與成員函數,這時sizeof(A)的值是多少?
A . 1
B . 0
C . 4
D . 執行階段錯誤

分析:舉例,class Base {};
運行cout<<”sizeof(Base)=”<

#include <stdio.h>main( ){     FILE * fp;    int i,a[ 6]=﹛1,2,3,4,5,6﹜,k;    fp = fopen(〝data.dat〞,〝w+〞);    for (i=0;i<6;i+ +)    {         fseek( fp,0L,0);         fprintf(fp,"%d\n",a [ i]);         rewind (fp);        fscanf(fp,〝%d〞,&k);        fclose(fp);        printf("%d\n",k);    }}

A . 123456
B . 1
C . 6
D . 21

分析: 討論中的解釋是這樣的,本題考查檔案操作函數,fseek用於二進位方式開啟的檔案,移動檔案讀寫指標位置。將檔案內部的位置指標重新指向一個流(資料流/檔案)的開頭。所以最後只保留的6。

答案:C

總結: 錯選B , 沒看懂題目。。。

著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

《C/C++專項練習》 — (3)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.