🔧 C言語基礎文法完全ガイド【図解×コード】
📌 はじめに
この記事では、C言語の基本文法を図解とコードで分かりやすく解説します。プログラミングの基礎を学びたい方や、組込み開発に興味がある方におすすめの内容です。
🖥️ C言語ってどんな言語?
C言語は以下のような場面でよく使われます:
- OS開発(Linux、Windowsなど)
- 組込みシステム(IoT、家電製品)
- デバイスドライバ
- 高速処理が必要なシステム
🌍 C言語の特徴(図解)
🧰 1. 開発環境の準備
🔧 コンパイラをインストールする
Windows:
-
MinGW(Minimalist GNU for Windows)
- ※より現代的な環境が良い場合は、Visual Studio Community もおすすめです。
Mac:
- Xcode Command Line Tools
xcode-select --install
Linux:
- GCC(GNU Compiler Collection)
sudo apt install build-essential # Ubuntu/Debian sudo yum install gcc # CentOS/RHEL
バージョン確認:
gcc --version
エディタ:
- VS Code + C/C++拡張機能
- Visual Studio(Windows)
- CLion(有料だが高機能)
🚀 2. 「Hello, World!」を動かしてみる
#include <stdio.h>
int main() {
printf("Hello, World!\n");
return 0;
}
コンパイルと実行
# コンパイル
gcc hello.c -o hello
# 実行
./hello # Linux/Mac
hello.exe # Windows
📘 3. 変数とデータ型
C言語は静的型付けで、型宣言が必須です。
主な型一覧
| 型 | 説明 | サイズ(目安※) | 例 |
|---|---|---|---|
| int | 整数 | 4バイト | 10, -5 |
| float | 単精度小数 | 4バイト | 3.14f |
| double | 倍精度小数 | 8バイト | 3.14159 |
| char | 文字 | 1バイト | 'A' |
| char[] | 文字列 | 可変 | "Hello" |
※intのサイズ等は環境(CPUアーキテクチャ)により異なる場合があります。
サンプル
#include <stdio.h>
int main() {
int age = 25;
float height = 180.5f;
double pi = 3.14159;
char grade = 'A';
char name[] = "Taro";
printf("Age: %d\n", age);
printf("Height: %.1f\n", height);
printf("Pi: %.5f\n", pi);
printf("Grade: %c\n", grade);
printf("Name: %s\n", name);
return 0;
}
🔁 4. 条件分岐(if / switch)
if 文
#include <stdio.h>
int main() {
int score = 80;
if (score >= 90) {
printf("Excellent!\n");
} else if (score >= 70) {
printf("Good!\n");
} else {
printf("Try again\n");
}
return 0;
}
switch 文
#include <stdio.h>
int main() {
int n = 2;
switch (n) {
case 1:
printf("One\n");
break;
case 2:
printf("Two\n");
break;
default:
printf("Other\n");
}
return 0;
}
🔄 5. 繰り返し
for 文
#include <stdio.h>
int main() {
for (int i = 0; i < 3; i++) {
printf("%d\n", i);
}
return 0;
}
while 文
#include <stdio.h>
int main() {
int i = 0;
while (i < 3) {
printf("%d\n", i);
i++;
}
return 0;
}
do-while 文
#include <stdio.h>
int main() {
int i = 0;
do {
printf("%d\n", i);
i++;
} while (i < 3);
return 0;
}
📦 6. 配列(Array)
#include <stdio.h>
int main() {
int nums[] = {10, 20, 30};
// 配列の要素数を取得
// (全体のバイト数 ÷ 要素1つのバイト数 = 要素数)
int length = sizeof(nums) / sizeof(nums[0]);
for (int i = 0; i < length; i++) {
printf("%d\n", nums[i]);
}
return 0;
}
多次元配列
#include <stdio.h>
int main() {
int matrix[2][3] = {
{1, 2, 3},
{4, 5, 6}
};
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 3; j++) {
printf("%d ", matrix[i][j]);
}
printf("\n");
}
return 0;
}
🧱 7. 関数
#include <stdio.h>
// 関数のプロトタイプ宣言
int add(int a, int b);
int main() {
int result = add(3, 5);
printf("Result: %d\n", result);
return 0;
}
// 関数の定義
int add(int a, int b) {
return a + b;
}
void型(戻り値なし)
#include <stdio.h>
void greet(char name[]) {
printf("Hello, %s!\n", name);
}
int main() {
greet("Taro");
return 0;
}
🧑🏫 8. ポインタ(重要概念)
基本的なポインタ
#include <stdio.h>
int main() {
int x = 10;
int *p = &x; // xのアドレスをpに格納
printf("xの値: %d\n", x);
printf("xのアドレス: %p\n", (void*)&x);
printf("pの値(アドレス): %p\n", (void*)p);
printf("pが指す値: %d\n", *p);
// ポインタ経由で値を変更
*p = 20;
printf("変更後のxの値: %d\n", x);
return 0;
}
配列とポインタ
#include <stdio.h>
int main() {
int nums[] = {10, 20, 30};
int *p = nums; // 配列の先頭アドレス
for (int i = 0; i < 3; i++) {
printf("%d\n", *(p + i));
// または p[i] でもOK
}
return 0;
}
💾 9. 動的メモリ確保
#include <stdio.h>
#include <stdlib.h>
int main() {
// メモリ確保
int *nums = (int*)malloc(5 * sizeof(int));
if (nums == NULL) {
printf("メモリ確保に失敗\n");
return 1;
}
// 値の代入
for (int i = 0; i < 5; i++) {
nums[i] = i * 10;
}
// 表示
for (int i = 0; i < 5; i++) {
printf("%d\n", nums[i]);
}
// メモリ解放(重要!)
free(nums);
return 0;
}
📝 10. 実践課題
👉 課題
「整数の配列から最大値を返す関数を作成せよ」
解答例
#include <stdio.h>
int getMax(int nums[], int length) {
int max = nums[0];
for (int i = 1; i < length; i++) {
if (nums[i] > max) {
max = nums[i];
}
}
return max;
}
int main() {
int nums[] = {5, 2, 9, 1, 7};
int length = sizeof(nums) / sizeof(nums[0]);
int max = getMax(nums, length);
printf("最大値: %d\n", max);
return 0;
}
🎉 まとめ
この記事では、C言語の基本文法を以下のように解説しました。
- 開発環境: GCCコンパイラの準備
- 基本構文: 変数、if文、ループ
- ポインタ: メモリアドレスの操作
- メモリ管理: malloc/free
Java/Python/C言語の比較
| 項目 | Java | Python | C言語 |
|---|---|---|---|
| 型宣言 | 必須 | 不要 | 必須 |
| メモリ管理 | 自動(GC) | 自動 | 手動 |
| コンパイル | 必要(JVM) | 不要 | 必要(機械語) |
| ポインタ | なし | なし | あり |
| 実行速度 | 中 | 低速 | 高速 |
| 主な用途 | 業務システム | AI/分析 | OS/組込み |
C言語の特徴
- ✅ 実行速度が非常に速い
- ✅ ハードウェアを直接制御できる
- ⚠️ メモリ管理を手動で行う必要がある
- ⚠️ セグメンテーション違反(メモリエラー)に注意
次のステップ
- 構造体でデータをまとめる
- ファイル入出力を学ぶ
- マルチスレッドでpthreadを使う
- **C++**でオブジェクト指向を学ぶ
これからC言語を学ぶ方の参考になれば嬉しいです!
参考になったら「いいね」👍 お願いします!