プログラミングの「登竜門」とも言われるC言語。
最近、セキュリティの勉強を進める中でその重要性を痛感し、以前から興味のあったスマート農業とも密接な関係があるということで、本格的に学習を始めました。

C language, Security, and Smart Agriculture
オブジェクト指向言語(PythonやJavaScriptなど)に比べると、クラスがない分覚えることは少ない印象ですが、その分「どう書けばどう動くか」という論理的思考がよりシビアに求められる気がしています。
---
基礎の勉強メモ
まずは一通り基礎をさらってみました。いくつか印象に残った点をメモしておきます。
- `while(1)` 無限ループ
- 条件分岐
- データ型と範囲
- 乱数の生成
- 標準入力・出力
---
最大の壁、ポインタとメモリ
やはり一度は躓きました、ポインタ。
「&」は住所(アドレス)を教える、「*」はその住所にある値を使う。

C Pointers Concept
他の言語で「変数をさらに変数に入れる」ような感覚があったので、なんとか理解できました。基本情報の勉強でも出てきたような気がします(笑)。
# 【補足】メモリの「スロット」の話
ここで、ポインタが具体的にどれくらいのメモリを使うのか、少し深掘りして補足します。
| 型 | 使用するスロット数 (バイト) | 役割 |
| :--- | :--- | :--- |
| char | 1スロット | 1文字を格納 |
| int | 4スロット | 約21億までの整数(32ビット環境以上) |
| double | 8スロット | 精度の高い実数 |
| ポインタ型 | 4 または 8 スロット | データの場所(アドレス)を指し示す |
※ポインタ変数のサイズは、実は「指している先の型」に関わらず、実行環境(32bitか64bitか)によって決まります。現代の多くのPC(64bit)なら8スロット(8バイト)分を使って「住所」を記録しています。
大きなデータ(画像やセンサーログなど)をそのまま渡すとメモリを大量に消費しますが、ポインタを使って「住所だけ」を渡す(参照渡し)ことで、メモリ使用量を抑え、高速な処理が可能になるんですね。
---
スマート農業:自動水撒きシミュレーション
習ったことを活かして、スマート農業で使われそうな「自動水撒きシステム」の簡易コードを書いてみました。
湿度が下がったら水を撒き、待機中や動作中にバッテリーが減っていくシンプルなロジックです。

Smart Agriculture Robot
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <unistd.h>
int main (){
double moisture = 100.0;
double battery = 100.0;
// 乱数のシードを設定
srand((unsigned int)time(NULL));
while(1){
printf("水分量: %.1f%% | 電池: %.1f%%\n", moisture, battery);
if (battery <= 0) {
printf("バッテリー切れ!充電してください\n");
break;
}
// 湿度がランダムに低下
int random_num = rand() % 10;
moisture -= random_num;
if (moisture >= 80){
printf("十分な水分量です:%.1f%% (-1%%)\n", moisture);
battery -= 1;
} else if (moisture <= 30){
printf("散水します...水分量:%.1f%%\n", moisture);
moisture += 50; // 水を撒いて湿度回復
battery -= 5; // 散水は電力を消費
printf("散水完了。現在の水分量:%.1f%%\n", moisture);
} else {
printf("待機中... 水分量:%.1f%% (-1%%)\n", moisture);
battery -= 1;
}
if(battery <= 0) {
printf("充電してください!\n");
break;
}
sleep(1); // 1秒待機
}
return 0;
}実際には、ここに土壌湿度センサーやポンプを制御するライブラリを組み込んでいくことになります。低レイヤな制御ができるC言語だからこそ、ハードウェアに近いスマート農業の実装に強いんだなと実感しました。
---
学習の参考にしている本
一通りの基礎を学ぶにあたって、図書館で見つけた本も参考にしました。体系的にまとまっていて非常に分かりやすかったので、こちらでも紹介しておきます。
ネットの記事も便利ですが、一冊の本をじっくり読み進めると、知識の繋がりがより深まる気がします。
これから
C言語はセキュリティを学ぶ上でも、オーバーフロー攻撃の原理を理解したりするのに不可欠です。
農業とIT、そしてセキュリティ。一見バラバラに見えて実は繋がっているこれらの分野を、C言語という土台からしっかり固めていきたいと思います。

