『C/C++特別練習』—(3)
2585 ワード
シーケンス
第3回C/C++特别、うん、ショックに耐えて、顽张り続けます~
間違った問題の分析と総括
1 . 64ビットシステムには、次のクラスがあります.
では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タイプの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 . ランタイムエラー
解析:例として、
A . 123456 B . 1 C . 6 D . 21
分析:討論の中の解釈はこのようにして、本題はファイルの操作関数を調べて、fseekはバイナリ方式で開くファイルに用いて、ファイルの読み書きのポインタの位置を移動します.ファイル内の位置ポインタを、ストリーム(データストリーム/ファイル)の先頭に再指定します.だから最後に残ったのは6だけです.
答え:C
まとめ:間違ったBを選んで、問題を理解していません...
第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を選んで、問題を理解していません...