『C/C++特別練習』—(3)

2585 ワード

シーケンス
第3回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タイプの2次元配列で、intタイプ変数は4バイトを占め、各行は3*4=12バイトを占めている.2 D配列は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<#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
"
,a [ i]); rewind (fp); fscanf(fp,〝%d〞,&k); fclose(fp); printf("%d
"
,k); } }

A . 123456 B . 1 C . 6 D . 21
分析:討論の中の解釈はこのようにして、本題はファイルの操作関数を調べて、fseekはバイナリ方式で開くファイルに用いて、ファイルの読み書きのポインタの位置を移動します.ファイル内の位置ポインタを、ストリーム(データストリーム/ファイル)の先頭に再指定します.だから最後に残ったのは6だけです.
答え:C
まとめ:間違ったBを選んで、問題を理解していません...