C言語で無視されていること(一)

1687 ワード

  • switch...case文C言語で分岐文でよく使われるswitch...case文.一般的なフォーマットは
  • です.
    switch(flag){
    
    case   1:
    printf("  1");
    break;
    
    case   2:
    printf("  2");
    break;
    ...
    default:
    printf("default");
    break;
    
    }
    

    現在のcaseラベルに対応する定数が見つからない場合、自動的にdefault実行が選択されることはよく知られていますが、defaultの位置はプログラム実行に関係していますか?もしdefault文をswitchの最初の特典に置いたらどうですか?コードを変更します.
    switch(flag){
    
    default:
    printf("default");
    break;
    
    case   1:
    printf("  1");
    break;
    
    case   2:
    printf("  2");
    break;
    ...
    
    }
    

    このように修正すると、defaultのコードが直接実行されますか?プログラミングテストの結果、そうではなく、以前と同じように実行されているため、caseとdefaultの位置はプログラムの実行に影響しないことが分かった.
  • sizeofキーワードsizeofは、C言語では関数ではなくオペレータであり、プログラマによってオペレータではなく関数として認識されることが多い.
  • char* p = new char[32];
    int cnt = sizeof * p;
    

    上のコードに問題がありますか?問題ありませんが、運行結果はいくらですか?32?1?それとも他の数字ですか?答えは1です.カッコをつけたら?どの答えがいくらですか.
    char* p = new char[32];
    int cnt = sizeof (* p);
    

    答えはやはり1です.sizeofオペレータは、pがオブジェクトを指すタイプのバイト数を返すので、オブジェクトの数には関係ありません.上記の例ではpは1つのcharタイプのメモリを指し、charタイプは1バイトしか占めていないため、戻りは1であり、どのcharタイプのメモリが割り当てられているかとは関係ありません.コードを変更します.
    int* p = new int[32];
    int cnt = sizeof (* p);
    

    ではcntの結果は4です.intはメモリに4バイトを占めているからです.
    いつかっこをつけますか.sizeofのオペランドがタイプ名の場合、両側にカッコを付ける必要があります(このため、この関数と勘違いする人もいますが)、オペランドが変数の場合はカッコを付ける必要はありません
    int cnt = sizeof (int);
    
  • 宣言とは何か、定義とは何か覚えておいてください.C言語にオブジェクトがあり、ここで定義されているオブジェクトはC++のクラスオブジェクトではありません.このようなオブジェクトは、関数や変数などのリンクに関連しているだけです.

  • 宣言:他の場所でオブジェクトの名前が作成されていることを示しています.この名前を使用すると、何度も現れることができます.キーワードexternを使用する必要がある異なるファイルにも表示することができる.定義:オブジェクトが作成され、1つの場所にのみ表示される特殊な宣言です.