mikan's technical note

仕事&趣味で実験した小技の備忘録です(Linux,windows,DOS等)

MENU

【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からの移行なので、小物類まで必要なもの全てを購入

年配のお義父さま用なので、比較的安定志向のパーツを選んだつもり

モニターやドライブ等、手持ちがある場合はもっと安く抑えられると思います

f:id:myerss555:20180826091405j:plain

ASRock DeskMini 310/B/BB/JP

想像以上に小さくてびっくり!

専用の120W電源ACアダプタが付属

今回はWi-Wi無し ※別売でWi-Fiオプションキットあり

16,718円

f:id:myerss555:20180826090503j:plain

ASRock VESA マウントキット

あると便利

2,160円

f:id:myerss555:20180826091235j:plain

 intel Core i5-8400 BOX

購入時、最安値で19,998円

ここ半年くらいあまり値段の動きはないような

20,570円

f:id:myerss555:20180826090541j:plain

CFD D4N2666CM-8G DDR4-2666 260pin SO-DIMM 8GB

DeskMini 310 はノート用の SO-DIMM が必要です

11,819円

f:id:myerss555:20180826090610j:plain

crucial MX500 CT250MX500SSD1/JP

DeskMini 310 にはケースファンが無いのでなるべく発熱を抑えるため、NVMe(M.2) ではなく 2.5 インチモデルを選択

8,298円

f:id:myerss555:20180826090632j:plain

RAIJINTEK ZELOS トップフロー型 90mm ファン 44mm 高

DeskMini 310 にはこのサイズでギリギリ収まります(干渉なし)

純正クーラでもいいのでしょうが、少しでも冷えればいいなという理由と比較的安かった ZELOS を選択

2,700円

f:id:myerss555:20180826090708j:plain

Thermal Grizzly Kryonaut 1g

少しでも CPU を冷やすために

このグリスだけでもかなり下がるようです

950円

f:id:myerss555:20180826091257j:plain

I-O DATA EX-LDGC251TB ゲーミング 24.5型 0.8ms

1万ちょいの23.8型もありましたが、少しだけ大きいゲーミングモニタを奮発

19,980円

f:id:myerss555:20180826091011j:plain

elecom TK-FCM084BK 有線 日本語 92キー

依頼主さまからテンキーは不要と言うことでしたのでコンパクトタイプを選択

トラブルを抑えるためにあえて有線タイプを

750円

f:id:myerss555:20180826091038j:plain

logicool WIRELESS MOUSE M546

3,000円以下のワイヤレスで良さそうなものを選択

クリクリ(コロコロ?)がとても軽く慣性で多少回り続けるほど

2,558円

f:id:myerss555:20180826091056j:plain

I-O DATA EX-DVD04K 外付け DVD USB3.0

メジャーどころの中で比較的安かったので

2,780円

f:id:myerss555:20180826091118j:plain

elecom U3H-A408SBK USB3.0 HUB

使うことはないかもですが、本体のUSBポートが少ないので念のため

1,400円

f:id:myerss555:20180826091149j:plain

Transcend USB3.0 Card Reader

デジカメの写真取り込み用

868円

f:id:myerss555:20180826091208j:plain

ainex 電源スイッチ 有線リモコン

おそらく製造元は同じと見られる見た目もそっくりなものが、999円であるのでそちらのほうがいいかもしれません

※そもそも DeskMini 310 には空きブラケットがない上に、ピン接続部も一般的なものと異なるため、ボルトオンでは取付不可ですが配線加工できる方であれば全然問題なし

2,850円

f:id:myerss555:20180826091324j:plain

 組み立て開始

最低限必要なパーツはこれだけ(61,005円)

※CPUクーラとグリスは純正ファンでも可(その場合は 57,405円)

f:id:myerss555:20180826092709j:plain

①DeskMini 310 のビスを 4 本外す

f:id:myerss555:20180826092734j:plain

②引き抜く

f:id:myerss555:20180826092753j:plain

③ケース(Fパネル用)と繋がっているケーブルを抜く

f:id:myerss555:20180826092810j:plain

④ネジ 4 本を外してシャーシとマザーを分離

f:id:myerss555:20180826092839j:plain

⑤CPUを載せる

f:id:myerss555:20180826092903j:plain

⑥ZELOS(CPUクーラ)を取り付け、ケーブルをマザーに接続

 ※裏側4箇所を付属のナットで固定

f:id:myerss555:20180826093018j:plain

⑦シャーシに 2.5 SSD をビス 4 本で固定しマザーをシャーシに固定

 SSDとマザーをDeskMini 310 専用のケーブルで接続

f:id:myerss555:20180826092943j:plain

⑧ケースのケーブルをマザーに繋げて、ケースへ戻しビス 4 本を締める

f:id:myerss555:20180826093055j:plain

⑨DeskMini 310 専用ACアダプタ、DPケーブル、キーボード/マウスを繋げて電源オン

f:id:myerss555:20180826093120j:plain

⑩別売りのVESAマウントキットでモニタ背面に固定できます

 ※電源スイッチリモコンを取り付ける予定でしたが、DeskMini 310 のマザー側が

  一般的なピンでなかったため、手を加えないと接続できないことが判明

  Fケーブルの途中にハンダ付けでいけそうですが依頼品なのでやめときます

f:id:myerss555:20180826093142j:plain

USBメモリからWindows10 Pro をインストール後、DeskMini付属のドライバCDをインストールで完成

f:id:myerss555:20180826095646j:plain

総括

intel の第8世代 CPU core i5-8400 でこのコンパクトな本体、しかも120Wで運用可能

i7-8700 も正式サポートされているので、予算に余裕があれば i7-8700 も十分ありですね

自分用にも欲しい(*^^*)