c/c++テーマまとめ

5381 ワード

1、引用はvoidタイプでよろしいでしょうか.
A A、いけないB、できない
voidタイプにはメモリが割り当てられておらず、参照は別の固定メモリ変数の別名でなければならないため、voidを指すことはできません.参照は初期化する必要があります.タイプがあります.
2、64ビットプラットフォームマシンの下でsizeof(string_a)、sizeof(string_b)の大きさはそれぞれ()
1.char *string_a=(char *)malloc(100*sizeof(char));
2.char string_b[100];

正解:A
A、8 100 B、100 8 C、100 100 D、8 8
配列名はポインタに等しくなく、配列名が関数パラメータである場合にのみポインタstring_に劣化します.aは、64ビットシステムにおけるsizeof(char*)=8バイトstring_bがchar型の配列であり、64ビットシステムにおいてsizeof(char)=1であり、大きさは100*sizeof(char)であり、100バイトを占める.
3、以下のコードについて、その言い方は正しい()
void func()
{
   char b[2]={0};
   strcpy(b,"aaaa");
}

正解:A
A、Debug版クラッシュ、Release版正常B、Debug版正常、Release版クラッシュC、Debug版クラッシュ、Release版クラッシュD、Debug版正常、Release版正常
DebugではASSERT断言保護があるのでクラッシュし、Release最適化でASSERTが削除されるので正常に動作します.しかし、自分のメモリではないメモリを上書きするので、プログラムがクラッシュした列車、すなわち未定義の行為に乗って、どんな結果が出るかはお勧めできません.
4、次のテンプレート宣言で不正なものはどれですか()
正解:B D
A、template<class Type>class C1{};
B、template<class T, U, class V>class C2{};
C、template<class C1, typename C2>class C3{};
D、template<typename myT,  class myT>class C4{};

解释:BオプションのUパラメータにはタイプが指定されていません.Dオプションの2つのパラメータ名は同名です.!!!
関数テンプレートのフォーマット:
template <classclass    ,......>         (    )
{
   
}

クラステンプレートの形式は次のとおりです.
template<class       ,class    ,…>   class   
{ ... };

5、次の言い方はどれが正しいですか.
A、const int a;//aは定数B、int const a;//aは定数C、int const*a;//a定数を指すポインタD、const int*a;//aは常ポインタE、int const*a;//aは常針
A,B,const int a; int const a; この2つの書き方は同等であり,aがint定数であることを示す.
C,D,E,const int a; aはポインタであり、int定数またはint変数を任意に指すことができ、常にその指す目標をint定数とする.int const aと書くこともできます.意味は同じです.
D Eはすべて定数を指すポインタで、int*const aこそ常ポインタで、ポインタ定数とも呼ばれます!!!
6、配列とポインタの違いについて以下の説明が正しいのは?
正解:A B C
A、配列は、グローバル配列などの静的記憶領域で作成されるか、スタック上で作成されるかのいずれかである.B、演算子sizeofで配列の容量(バイト数)を算出することができるC、ポインタは任意のタイプのメモリブロックを随時指すことができる.D、演算子sizeofでポインタが指す内容の容量(バイト数)を算出することができる
解析:配列は、グローバル配列などの静的ストレージ領域で作成されるか、スタック上で作成されます.ポインタは任意のタイプのメモリブロックをいつでも指すことができます.(1)コンテンツの違いchar a[]=「hello」を変更します.a[0] = ‘X’; char *p = “world”;//注意pは定数文字列p[0]=‘X’;//コンパイラはこのエラーを発見することができず、実行時エラー(2)は演算子sizeofで配列の容量(バイト数)を計算することができる.sizeof(p)、pはポインタで得られるポインタ変数のバイト数であり、pが指すメモリ容量ではない.C++/C言語ではポインタが指すメモリ容量を知ることはできません.メモリを申請するときに覚えていない限り!!.注意配列が関数のパラメータとして伝達されると、その配列は自動的に同型のポインタに劣化する.char a[] = “hello world”; char *p = a; cout<< sizeof(a) << endl;//12バイトcout<7、次のコード、result変数の出力結果はいくらですか?
#include<iostream>
using namespace std;
int i=1;
class MyCls{
public:
    MyCls():m_nFor(m_nThd),m_nSec(i++),m_nFir(i++),m_nThd(i++){
        m_nThd=i;
    }
    void echo(){
        cout<<"result:"<<m_nFir+m_nSec+m_nThd+m_nFor<<endl;
    }
private:
    int m_nFir;
    int m_nSec;
    int m_nThd;
    int &m_nFor;
};
int main()
{
    MyCls oCls;
    oCls.echo();
    return 0;
}

正解:B
A、10 B、11 C、9 D、12 E、8
変数の初期化の順序は、その宣言の順序であり、初期化リストの順序とは関係ありません!!!したがって変数の初期化順序はm_nFir(i++),m_nSec(i++),m_nThd(i++),&m_nFor(m_nThd);(m_nForはm_nThdの1つの参照であることに注意)i初期値は1であるため、初期化リスト初期化後はm_nFir=1,m_nSec=2,m_nThd=3,m_nForはm_nThdの1つの参照となるm_nFir=1,初期化リスト初期化後はm_nFir=1,m_nFir=2,m_nSec=2,m_nThd=3,m_nForはm_nThdの1つの参照となる.そしてこのときiの値は4であり、構文関数で文m_nThd=iを実行した後、m_nThd=4,m_nThd=4,m_nFor=4,m_1.