0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

C言語基礎文法完全ガイド【図解×コード】初心者から組込み開発まで

Posted at

🔧 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言語の基本文法を以下のように解説しました。

  1. 開発環境: GCCコンパイラの準備
  2. 基本構文: 変数、if文、ループ
  3. ポインタ: メモリアドレスの操作
  4. メモリ管理: malloc/free

Java/Python/C言語の比較

項目 Java Python C言語
型宣言 必須 不要 必須
メモリ管理 自動(GC) 自動 手動
コンパイル 必要(JVM) 不要 必要(機械語)
ポインタ なし なし あり
実行速度 低速 高速
主な用途 業務システム AI/分析 OS/組込み

C言語の特徴

  • ✅ 実行速度が非常に速い
  • ✅ ハードウェアを直接制御できる
  • ⚠️ メモリ管理を手動で行う必要がある
  • ⚠️ セグメンテーション違反(メモリエラー)に注意

次のステップ

  • 構造体でデータをまとめる
  • ファイル入出力を学ぶ
  • マルチスレッドでpthreadを使う
  • **C++**でオブジェクト指向を学ぶ

これからC言語を学ぶ方の参考になれば嬉しいです!
参考になったら「いいね」👍 お願いします!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?