Menu
Coddy logo textTech

C 言語 チートシート

最終更新

Hello World とプログラムの構造

すべての C プログラムは main から始まり、int を返します。

要素コード
ヘッダーをインクルード#include <stdio.h>
エントリポイントint main(void) { ... }
コマンドライン引数ありint main(int argc, char *argv[]) { ... }
1 行を出力printf("Hello, World!\n");
成功を返すreturn 0;
一行コメント// comment
ブロックコメント/* comment */

データ型

サイズはプラットフォーム依存です。下記の最小値は標準で保証されています。

説明
int整数、最低 16 ビット (通常 32)
unsigned int非負の整数
long / long longより幅の広い整数 (最低 32 / 64 ビット)
float / double単精度 / 倍精度の浮動小数点数
char1 バイト、文字にも使う
_Bool (<stdbool.h> 経由で bool)true または false
size_tサイズやインデックス用の符号なし型
void型なし。関数や汎用ポインタに使う

printf と scanf の書式指定子

各引数の型に対応するプレースホルダ。

指定子対応するもの
%d / %i符号付き int
%u符号なし int
%ld / %lldlong / long long
%fdouble (printf では float も)
%.2f小数点以下 2 桁の double
%c1 文字の char
%s文字列 (char *)
%pポインタのアドレス
%x符号なし int を 16 進数で
%zusize_t

演算子

演算子意味
+ - * / %算術 (% は整数の剰余)
== !=等しい / 等しくない
< > <= >=比較
&& || !論理 and / or / not
& | ^ ~ << >>ビットごとの and、or、xor、not、シフト
++ --インクリメント / デクリメント
+= -= *= /=複合代入
cond ? a : b三項条件
sizeof(x)型や変数のバイト単位のサイズ

制御フロー

構文
if / elseif (x > 0) { ... } else { ... }
else ifelse if (x == 0) { ... }
switchswitch (n) { case 1: ...; break; default: ...; }
while ループwhile (i < n) { ... }
do-while ループdo { ... } while (i < n);
for ループfor (int i = 0; i < n; i++) { ... }
break / continuebreak; はループを抜け、continue; は次の反復へ進む
goto (まれ)goto label; ... label:

関数

使う前に宣言するか、ファイルの先頭にプロトタイプを追加します。

操作構文
関数を定義int add(int a, int b) { return a + b; }
プロトタイプ (宣言)int add(int a, int b);
戻り値なしvoid greet(void) { ... }
引数なしint rand_seed(void) { ... }
ポインタ渡し (変更)void inc(int *p) { (*p)++; }
配列を渡すint sum(int arr[], int n) { ... }
static (ファイル内ローカル)static int helper(void) { ... }

ポインタとメモリ

ポインタはアドレスを保持します。ヒープメモリは手動で解放する必要があります。

操作構文
ポインタを宣言int *p;
アドレス取得p = &x;
間接参照 (読み書き)int y = *p; / *p = 10;
NULL ポインタint *p = NULL;
ヒープに確保int *a = malloc(n * sizeof(int));
確保 + ゼロ初期化int *a = calloc(n, sizeof(int));
確保サイズを変更a = realloc(a, newSize);
ヒープメモリを解放free(a);
ポインタ演算*(a + i)a[i] と同じ

配列と文字列

C の文字列は \0 で終端された char の配列です。

操作構文
配列を宣言int nums[5];
配列を初期化int nums[] = {1, 2, 3};
要素にアクセスnums[0] = 10;
配列の長さ (スタック配列)sizeof(nums) / sizeof(nums[0])
文字列リテラルchar s[] = "hello";
文字列の長さstrlen(s) (\0 は含まない)
文字列をコピーstrcpy(dst, src);
文字列を比較strcmp(a, b) == 0 なら等しい
文字列を連結strcat(dst, src);

構造体とよく使う標準ライブラリ

操作構文
構造体を定義struct Point { int x; int y; };
宣言とアクセスstruct Point p; p.x = 1;
ポインタ経由でアクセスp->x = 1; ((*p).x と同じ)
型エイリアスtypedef struct Point Point;
入力を読み取るscanf("%d", &n);
文字列を int に変換int n = atoi("42");
絶対値 / べき乗abs(x) (int)、<math.h>pow(x, y)
配列をソートqsort(arr, n, sizeof(int), cmp);

最もよく使う C の構文、書式指定子、ポインタのパターンを 1 ページにまとめました。この C 言語チートシートは、C を書くためのクイックリファレンスです。データ型、printf/scanf の指定子、演算子、制御フロー、そして人がつまずきがちなポインタとメモリの操作を収録しています。

ここに載っているものはすべて標準の C (C99/C11) で、gcc または clang でコンパイルできます。必要なものをコピーするか、C プレイグラウンドでどのスニペットもその場で試してみてください。コンパイラのインストールは不要です。

C 言語 チートシート よくある質問

この C 言語チートシートは無料ですか?
はい。この C 言語チートシートは完全に無料で、登録も不要です。ブックマークしておけば、型や書式指定子、ポインタ操作を調べたいときにいつでも戻ってこられます。
C のスタックとヒープの違いは何ですか?
スタックメモリはローカル変数を保持し、関数が戻ると自動で解放されます。高速ですが、サイズに限りがあります。ヒープメモリは malloccalloc で明示的に確保され、free を呼ぶまで存続し、現在の関数より長く生きるメモリや、実行時にしかサイズが分からないメモリが必要なときに使います。ヒープメモリの free を忘れるとメモリリークになります。
なぜ scanf にはアンパサンド (&) が必要で printf には不要なのですか?
scanf は値を変数に書き戻すので、変数のアドレスが必要で、それを与えるのが &x です。printf は値を読むだけなので、値そのものを渡します。例外は文字列です。char の配列はすでにポインタに減衰するので、& なしで scanf("%s", name) と渡します。
C をオンラインで練習できますか?
はい。C プレイグラウンドを開けば、このチートシートのどのスニペットも、ブラウザ上でコンパイルして実行できます。コンパイラのインストールは不要です。体系的に学びたいときは、Coddy の無料インタラクティブ C コースが、変数とループからポインタ、メモリ管理まで段階的に導いてくれます。
このチートシートは初心者に向いていますか?
はい。最もよく使う構成要素 (型、printf、制御フロー) から高度なもの (ポインタ、メモリ、構造体) へと並べてあるので、初日から上のセクションを使い、残りには慣れながら進めます。
Coddy programming languages illustration

CoddyでCを学ぼう

始める