だてブログ

ねことテクと趣味のブログ

C言語入門メモ

  • 基本
  • オペランド演算子
    • 演算子の優先順位
    • モシュロ演算子
    • char < int < long < float < double
    • 明示的な型変換=キャスト
    • (型) 式←式自体を書き換えているのでなく付随しているという
  • 制御構造
    • 擬似コードー日本語で示す
    • Cでは”else if”
    • if, elseでは{}は必須ではない
  • レジスタ変数
  • 基本データ型=記憶領域のサイズ
    • 整数型ーint
    • 文字型ーchar
    • 浮動小数点型(実数型)ーfloatー数字の最後に”f”
    • 倍精度型ーfloatより精度の高いーdouble
    • 変数宣言は必須
      • その変数の値を格納するために必要な記憶領域をコンパイラが確保しないから
      • long/short型ー領域のl/sー数字の最後にl
    • unsigned型変数=整数ー数字の最後に"u"
    • C言語では文字は数字
    • 8進数は"0"から始まる
    • エスケープシーケンス
    • const修飾子ー値を変えることができない
    • 初期化&宣言「宣言 変数名 = 値;」
      • 横に複数並べては☓、縦に分ける
  • 記憶クラス=メモリ上のどこに記憶されるか
    • 自動変数(auto) - デフォ/省略/局所的
    • 静的変数(static) - 関数の実行処理が終わった後でもデータを保持する
    • 外部変数(extern) - 広域的
    • Cでは一つの関数の中に他の関数と定義することは不可能 - Cの関数は全て対等
  • Cでは’ ’と””は使い分けなければならない
    • 文字定数と文字列定数
  • 関数
    • main()関数<ー必須
    • 関数が頬下の関数を呼び出す
      • 呼び出された関数に一旦制御を預ける
      • 呼び出し元の関数は一旦眠る
    • 関数の中で自分自身を呼ぶ - 再帰呼び出し
    • Cの関数は階層関係なし、平等!
    • printf()とputchar()
    • 関数のプロトタイプ宣言 型名 関数(戻り値型名 [引数])
    • 関数の使用宣言
    • Void関数 = 値を持たない、returnしない
  • プリプロセッサ(Cマクロプリプロセッサ)
    • コンパイル前に起動
    • #define 文字列1 文字列2
    • マクロ名は"大文字"、他は小文字
    • 処理の手順(プロセス)
    • 引数付きマクロ
      • #define マクロ名(~) (~~~~~)
    • プリプロセッサはCではない
    • マクロ()と関数の違い
      • マクロ - 実行速度が早い
      • 関数 - プログラムのサイズが減る
    • 引数「#OO」: 文字列定数に置き換え
    • ##:連結(☓加算)
    • #include ファイル名
    • #undef マクロ名
    • #ifdef マクロ名 ... #endif
  • 配列
    • 線形配列
    • 2次元配列
    • 宣言:型名 配列名[要素数];
    • 配列名[添字] <- インデックス
    • 規定アドレス - 配列の先頭
      • 規定アドレスから型サイズ文ずつ、隣接して領域を確保していく
    • 初期化 - 記憶クラスは静的か外部
    • 2次元配列
    • 文字配列では最後に暗黙的にNULLが入る
    • 配列の要素は全て同じ方であること
  • 入出力とライブラリ関数
    • CはOS上で動くことを前提として作られている
    • OSのかならずあるファイル入出力機能を利用しデータを入出力する
    • 基本的に「標準入力・出力」として補え、入出力の種類には関与しない
      • バイスはなんでもいい
      • getchar(), putchar(), gets(), puts(), scanf(), printf()
    • puts()
      • int型を返す。
      • エラーは-1を返す
      • ラストは'\n'
    • gets()
      • エラー -> Null
    • printf()
      • %d = 10進数
      • %u = 符号なし10進数
      • %o = 8進数
      • %x = 16進数
      • %c = 文字
      • %s = 文字列
    • scanf - 引数はポインタ
    • 文字列操作関数 - strcat(), strcmp(), strcpy(), strlen()
  • ポインタ - 変数を指す変数の意。変数の格納場所
    • ポインタは宣言をすること(intであること)
    • ポインタ宣言:型名(int) * ポインタ;
    • 配列では「配列名」は規定アドレス「&Zilch[0]」と同義
    • Zilch[i] = static 型名 配列名[] = 要素(最後は'\0'が入る)
    • voidポインタ = どのような型のポインタにも変換可能な汎用ポインタ
    • レジスタ変数 = アドレス情報を格納できます
    • レジスタに記憶
 ポインタ carter 変数 Kennedy  9381  = kennedyのアドレス = &kennedy 5 = kennedyの内容 = *(&kennedy)
 アドレス 8364 アドレス 9381
 内容 9381 内容 5
 変数名 = carter 変数名 = kennedy
 ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓
 名前 kennedy アドレス &kennedy 内容 *(&kennedy)
  • 構造体
    • 構造体宣言(struct) struct タグ名 { 型名 メンバ名 ; ... };
    • 記憶領域の確保はしない
    • 構造体の使用宣言 struct タグ名 変数名の並び
    • 構造体変数の配列
    • 構造体ポインタ 使用宣言:struct タグ名 * ポインタ名;
    • アロー演算子 '->'
      • ポインタの指す構造体変数のメンバを選択
    • 共用体 - union
      • 全てのメンバのための記憶領域を一つしか持たない
  • ビット演算子
    • ビット反転演算子 "~"
    • ビットシフト - ビット列を左右にスライド - '<>'
      • 必ず整数!
      • 桁数>対象、桁数が負=>☓ - 算桁シフト
    • 論理積'&' - 演算される2つのビットが共に一つのときだけに1となる(論理積)
    • 論理和'|'
    • 排他'・^' - 互いに異なるときのみ
    • sizeof演算子 - オペランドのサイズをバイト型で返す
    • 条件演算子 - 式1?式2;式3
  • 関数ポインタ
    • 関数へのポインタ宣言
      • int(* func - ptr));
    • 関数の宣言
      • int func - ptrl();
    • ポインタに関数を代入
      • func - ptr = func_ptrl;
    • ポインタ変数で関数を呼び出す
      • (* func_ptr)();
  • ファイル入出力
    • 低レベル入出力関数 - OSに近いところでファイル処理
      • open(),create(),read(),write(),close()
    • 高レベル入出力関数 - Cの標準ライブラリ
      • fopen, fclose, getc, putc, fgets, fputs, fprintf, fscanf, getw, putw, feof, ferror, fseek, fread, fwrite,
    • FILE fopen()
      • FILE *ポインタ1, ポインタ2;
        • FILE型のポインタとして宣言
      • ポインタ1 = fopen(ファイル, 型)
      • ポインタ2 = fopen(ファイル, 型)
    • FILE構造体...ファイル1つ1つに割当

参照:

C言語入門 (ASCII SOFTWARE SCIENCE Language) https://www.amazon.co.jp/C%E8%A8%80%E8%AA%9E%E5%85%A5%E9%96%80-ASCII-SOFTWARE-SCIENCE-Language/dp/4756102700