C言語で出会った問題を解く

1537 ワード

C言語を使っていると、困ったことがよくあるので、メモしておきます.
  • unsigned char a;
    printf("%d
    ", sizeof(a)); printf("%d
    ", sizeof(~a));
    出力結果は:1 4
  • 逆取り操作はまず操作数をintに上げてから逆取りを行います.
             "Operands that are smaller than an int (such as bool and char ) are converted to int before the operator is applied. "
    2.
    sizeof int  // error
    sizeof(int)
    sizeof('a')  // recommend,    4
    sizeof 'a'  //   4

    sizeof演算オブジェクトがタイプである場合、カッコは少なくない必要があります.演算オブジェクトが特定の量である場合、カッコは有無にかかわらず使用できますが、カッコの使用を推奨します.
    文字定数は整形定数に属し、一般的にint型の記憶タイプであるため、記憶空間サイズは4である.
    3.定数は次のように分けられます.
  • 整数定数:一般的にデフォルトのストレージタイプはintであり、整数が大きいとint型が格納できない場合はunsinged int->long->unsigned longを使用して格納されます.文字定数も整数定数に属し、int型で格納されます.
  • 浮動小数点定数
  • 文字列定数
  • 符号定数:#define PI 3.14,PIは符号定数(明示定数とも呼ばれる)
  • 4.floatタイプの値がprintf()のパラメータである場合doubleタイプに変換されます.floatタイプは4字形でprintf()関数のパラメータとして8バイトに拡張されます.char、shortタイプの整数をprintf()のパラメータとするとint型に変換されます.printf()パラメータのスタック順序は、一般に右から左になる.先入スタックの変数は高アドレスに、後入スタックの変数は低アドレスに配置されます.
    printf("%c  %hd  %d
    ", 3.14f, 123, 456); // ? ? 123, 456,123, 3.14。3.14 double ( 8 )。 3.14 4 (%c, 1 ), 4 (%hd, 2 short ), 123, int 。

    5.int a = 1;  int arr[] = {a, 1, 3};//C 89とKeil Cでは不正です.C 89は配列の初期化式(initializer)が定数式である必要があるためです.C 99では合法です.
    6.Keiの割り込み関数は長すぎてはいけません.長すぎると、次の割り込みが来たときにプログラムが前回の割り込みプログラムを実行している場合、最新の割り込みが無視されます.プログラムは未完了の割り込みプログラムを実行し続けます.