【C言語】ポインタを理解するための第一歩(int型)
C未経験なのにCのプログラム改修をやらされている同僚くん…
そんな彼にポインタの基本をわかってもらうために書いたサンプルです
※このあとchar型のポインタと配列でまた混乱している同僚くん…ガンバ!(^^;;
プログラム
sample.c
#include <stdio.h> int main(void) { int iNum; int *piNum; // コードの表示(実行結果がわかりやすいように。意味はない) printf("\n"); printf("int iNum;\n"); printf("int *piNum;\n"); printf("\n"); // 確認 printf("---------- 確認 ----------\n"); printf("&iNum :%p\n", &iNum); printf("iNum :%d\n", iNum); printf("&piNum:%p\n", &piNum); printf("piNum :%p\n", piNum); printf("*piNum:%d\n",*piNum); // piNumは不定なので危険(コケるかも) printf("--------------------------\n"); // 値を設定 iNum = 555; // アドレスを設定(とりあえず NULL を設定) piNum = NULL; // コードの表示(実行結果がわかりやすいように。意味はない) printf("\n"); printf("iNum = 555;\n"); printf("piNum = NULL;\n"); printf("\n"); // 確認 printf("---------- 確認 ----------\n"); printf("&iNum :%p\n", &iNum); printf("iNum :%d\n", iNum); printf("&piNum:%p\n", &piNum); printf("piNum :%p\n", piNum); // printf("*piNum:%d\n",*piNum); // piNumはNULLなのでコケる printf("--------------------------\n"); // アドレスを設定 piNum = &iNum; // コードの表示(実行結果がわかりやすいように。意味はない) printf("\n"); printf("piNum = &iNum;\n"); printf("\n"); // 確認 printf("---------- 確認 ----------\n"); printf("&piNum:%p\n", &piNum); printf("piNum :%p\n", piNum); printf("*piNum:%d\n",*piNum); printf("--------------------------\n"); // 値を設定 *piNum = 777; // コードの表示(実行結果がわかりやすいように。意味はない) printf("\n"); printf("*piNum = 777;\n"); printf("\n"); // 確認 printf("---------- 確認 ----------\n"); printf("&piNum:%p\n", &piNum); printf("piNum :%p\n", piNum); printf("*piNum:%d\n",*piNum); printf("iNum :%d\n",iNum); // ここが重要 printf("--------------------------\n"); return 0; }
実行結果
int iNum; int *piNum; ---------- 確認 ---------- &iNum :0x7ffcc0cafd9c iNum :21958 &piNum:0x7ffcc0cafda0 piNum :0x7ffcc0cafe90 *piNum:1 -------------------------- iNum = 555; piNum = NULL; ---------- 確認 ---------- &iNum :0x7ffcc0cafd9c iNum :555 &piNum:0x7ffcc0cafda0 piNum :(nil) -------------------------- piNum = &iNum; ---------- 確認 ---------- &piNum:0x7ffcc0cafda0 piNum :0x7ffcc0cafd9c *piNum:555 -------------------------- *piNum = 777; ---------- 確認 ---------- &piNum:0x7ffcc0cafda0 piNum :0x7ffcc0cafd9c *piNum:777 iNum :777 --------------------------
ポイント
piNum = &iNum;
piNum = 777;
を実行すると、
iNum の値も 777 になる
仕組みを理解しましょう
piNum は iNum のアドレス(メモリ上の番地)を指している
ので、*pinum は iNum と同じなのです
次回は、char型のポインタについて
【ぼくのPC大改造計画】ASRock DeskMini 310 でミニマム快適マシンを組む(後編)
届いたパーツ一式
合計 94,402円 ※OSは別途必要
今回は古いノートPCからの移行なので、小物類まで必要なもの全てを購入
年配のお義父さま用なので、比較的安定志向のパーツを選んだつもり
モニターやドライブ等、手持ちがある場合はもっと安く抑えられると思います
ASRock DeskMini 310/B/BB/JP
想像以上に小さくてびっくり!
専用の120W電源ACアダプタが付属
今回はWi-Wi無し ※別売でWi-Fiオプションキットあり
16,718円
ASRock VESA マウントキット
あると便利
2,160円
intel Core i5-8400 BOX
購入時、最安値で19,998円
ここ半年くらいあまり値段の動きはないような
20,570円
CFD D4N2666CM-8G DDR4-2666 260pin SO-DIMM 8GB
DeskMini 310 はノート用の SO-DIMM が必要です
11,819円
crucial MX500 CT250MX500SSD1/JP
DeskMini 310 にはケースファンが無いのでなるべく発熱を抑えるため、NVMe(M.2) ではなく 2.5 インチモデルを選択
8,298円
RAIJINTEK ZELOS トップフロー型 90mm ファン 44mm 高
DeskMini 310 にはこのサイズでギリギリ収まります(干渉なし)
純正クーラでもいいのでしょうが、少しでも冷えればいいなという理由と比較的安かった ZELOS を選択
2,700円
Thermal Grizzly Kryonaut 1g
少しでも CPU を冷やすために
このグリスだけでもかなり下がるようです
950円
I-O DATA EX-LDGC251TB ゲーミング 24.5型 0.8ms
1万ちょいの23.8型もありましたが、少しだけ大きいゲーミングモニタを奮発
19,980円
elecom TK-FCM084BK 有線 日本語 92キー
依頼主さまからテンキーは不要と言うことでしたのでコンパクトタイプを選択
トラブルを抑えるためにあえて有線タイプを
750円
logicool WIRELESS MOUSE M546
3,000円以下のワイヤレスで良さそうなものを選択
クリクリ(コロコロ?)がとても軽く慣性で多少回り続けるほど
2,558円
I-O DATA EX-DVD04K 外付け DVD USB3.0
メジャーどころの中で比較的安かったので
2,780円
elecom U3H-A408SBK USB3.0 HUB
使うことはないかもですが、本体のUSBポートが少ないので念のため
1,400円
Transcend USB3.0 Card Reader
デジカメの写真取り込み用
868円
ainex 電源スイッチ 有線リモコン
おそらく製造元は同じと見られる見た目もそっくりなものが、999円であるのでそちらのほうがいいかもしれません
※そもそも DeskMini 310 には空きブラケットがない上に、ピン接続部も一般的なものと異なるため、ボルトオンでは取付不可ですが配線加工できる方であれば全然問題なし
2,850円
組み立て開始
最低限必要なパーツはこれだけ(61,005円)
※CPUクーラとグリスは純正ファンでも可(その場合は 57,405円)
①DeskMini 310 のビスを 4 本外す
②引き抜く
③ケース(Fパネル用)と繋がっているケーブルを抜く
④ネジ 4 本を外してシャーシとマザーを分離
⑤CPUを載せる
⑥ZELOS(CPUクーラ)を取り付け、ケーブルをマザーに接続
※裏側4箇所を付属のナットで固定
⑦シャーシに 2.5 SSD をビス 4 本で固定しマザーをシャーシに固定
SSDとマザーをDeskMini 310 専用のケーブルで接続
⑧ケースのケーブルをマザーに繋げて、ケースへ戻しビス 4 本を締める
⑨DeskMini 310 専用ACアダプタ、DPケーブル、キーボード/マウスを繋げて電源オン
⑩別売りのVESAマウントキットでモニタ背面に固定できます
※電源スイッチリモコンを取り付ける予定でしたが、DeskMini 310 のマザー側が
一般的なピンでなかったため、手を加えないと接続できないことが判明
Fケーブルの途中にハンダ付けでいけそうですが依頼品なのでやめときます
⑪USBメモリからWindows10 Pro をインストール後、DeskMini付属のドライバCDをインストールで完成
総括
intel の第8世代 CPU core i5-8400 でこのコンパクトな本体、しかも120Wで運用可能
i7-8700 も正式サポートされているので、予算に余裕があれば i7-8700 も十分ありですね
自分用にも欲しい(*^^*)