C:メモ:列挙構造連合

2005 ワード

列挙
プログラムに一定の数字が必要な場合、これらの数字はmagic numberと呼ばれ、これらの数字は常に文字で置き換えられます.
たとえば、色を定義します.
const int red = 0;
const int yellow = 0;
const int green = 0;
より良い方法は、上記の独立したconst int変数の代わりに、列挙タイプを使用して定義することです.
enum COLOR{RED, YELLOW, GREEN};//RED=0,YELLOW=1,GREEN=2

Enum COLORは、タイプ宣言のプレフィックスとして使用されます.
enum COLOR t;//t          ,   enum COLOR, C   ,enum     。

列挙はintのみで、列挙量のデフォルトは0からです.列挙タイプの各量の値サイズを指定することもできます.
(C言語の列挙タイプはあまり使われません.使いにくいからです)
こうぞう
structキーワード{}の後ろにセミコロンが必要です.
//      :
//     :
struct date{
    int month;
    int day;
    int year;
};
//     :
struct {
    int month;
    int day;
    int year;
}today;//      ,        ,       today   。
//               ,     ,     。

struct date today;//      today date      。
today = (struct date){12,05,2015};//   today
today = {.month = 12, .year = 2015};//       。
today.month = 12;//     。
today1 = today2;//          ,       。

配列変数名は変数アドレスですが、構造はそうではありません.&を使用してアドレス値を取得する必要があります.
構造変数が関数内でパラメータとして渡されると、変数ではなく値が渡されます.つまり、関数内に新しい構造変数が作成されます.
->シンボル->ポインタが指す構造変数のメンバー
struct date *p = &today;
(*p).month = 12;
p->month = 12;//       。
//->               。

配列タイプは、カスタム構造タイプでも使用できます.
struct date today[2] = {{12,05,2015},{10,01,2016}};//date構造タイプの配列を定義します.
today[0].day = 5;//配列内の構造のメンバー変数をインデックス番号とポイントで参照します.
コンビネーション
typedef
typedef:カスタムデータ型
typedef int Length;//lengthはintの別名になります.
typedef struct ADate{
    int month;
    int day;
    int year;
} Date;
//DateはtypedefとDateの間のものを表しています.
Date a = {12, 5, 2015};//typedefを使用すると、この文は次の文に相当します.すなわち,以降,新しい構造変数を宣言するたびにstructを持つ必要はない.
struct ADate a = {12, 5, 2015};
union 
union Test{
    int i;
    char c;
} test1, test2;
sizeof(union Test);//結果はsizeof(各メンバー)の最大値です.
//unionの場合、すべてのメンバー変数は同じメモリ領域を使用します.
//同じ時間に有効なメンバーは1人だけです.