関数とポインタの理解
関数の役割と種類
関数は特定の処理を再利用可能なコードブロックとして定義する仕組みです。コードの再利用性を高め、保守性を改善する目的で使用されます。
関数定義と呼び出しの基本
#include <stdio.h>
// 関数のプロトタイプ
void printBanner();
int main() {
// 3回関数を呼び出す
printBanner();
printBanner();
printBanner();
return 0;
}
// 関数の実装
void printBanner() {
printf("========================================\n");
printf(" 組込み開発におけるC言語の基本構造\n");
printf("========================================\n");
printf("関数の活用によりコードの再利用性が向上\n");
printf("ポインタ操作はハードウェア制御の要\n");
printf("----------------------------------------\n");
}
引数なし戻り値なし関数
最も基本的な関数形式です。特定の処理を繰り返し実行する用途に適します。
#include <stdio.h>
// 関数宣言
void calculateSum();
int main() {
// 計算関数を複数回呼び出し
calculateSum();
calculateSum();
return 0;
}
// 関数定義
void calculateSum() {
int a = 5, b = 7;
int result = a + b;
printf("計算結果: %d\n", result);
}
引数あり戻り値なし関数
処理に必要なデータを外部から受け取る機能を備えた関数形式です。
#include <stdio.h>
// 関数プロトタイプ
void displayProduct(int num1, int num2);
int main() {
// 関数呼び出し
displayProduct(3, 4);
displayProduct(5, 6);
return 0;
}
// 関数実装
void displayProduct(int num1, int num2) {
int product = num1 * num2;
printf("乗算結果: %d × %d = %d\n", num1, num2, product);
}
変数のスコープとメモリ管理
- ローカル変数:関数内部でのみ有効な変数
- グローバル変数:プログラム全体で参照可能な変数
- 静的変数:ファイル内でのみ保持される変数
ポインタの基本と応用
ポインタはメモリアドレスを保持する特殊な変数です。ハードウェア制御には不可欠な概念です。
ポインタの基本操作
#include <stdio.h>
int main() {
int value = 42;
int *ptr = &value; // アドレス取得
// 値の参照と変更
printf("元の値: %d\n", *ptr);
*ptr = 100;
printf("変更後: %d\n", value);
return 0;
}
関数間でのポインタ引数
#include <stdio.h>
// 関数プロトタイプ
void increment(int *num);
int main() {
int count = 0;
// ポインタ経由で値を操作
increment(&count);
increment(&count);
printf("カウンタ値: %d\n", count);
return 0;
}
// ポインタ引数を使用する関数
void increment(int *num) {
if(num != NULL) {
(*num)++;
}
}