天国にいけるC言語入門 ヘキサ構造体 ver1.965

作者 @solarplexuss

1話目から読む

新規登録でもっと便利に!

ユーザー投稿作品やKADOKAWAの人気作品をもっと便利に読めます。

閲覧履歴

どこまで読んだか忘れても大丈夫。自動的に記憶してくれます。

更新情報

「フォロー」した作家・作品の更新情報がメールで届きます。

マイページ

好きな作品を管理できる、あなた専用の本棚ができます。

必要なもの

ユーザー登録(無料)に必要なのは、メールアドレスだけ! 登録は簡単です。

目次

連載中 全296話

更新

  1. 理想郷との接続に成功しました
  2. ようこそ 天国にいけるC言語入門 ヘキサ構造体へ
  3. 現在、天国にいけるC言語入門 ヘキサ構造体は理想郷とつながっています 理想郷の仲間とともにC言語を学んでいきましょう
  4. 現在、天国にいけるC言語入門 ヘキサ構造体は理想郷とオンラインでつながっています。🌞🌞🌞🌞🌞
  5. とてもインストール簡単で便利なマイクロソフトVISUAL STUDIO 0.1
  6. 6/23日 午前零時 カクヨムと提携している電子書籍サイトBOOK WALKERより天国にいけるC言語入門2 ヘキサ構造体 第13章が出版されます
  7. int型、char型に格納されているにかかわらず数値を%c出力変換指定子をつかってprintf出力表示すると文字の画像データ(文字)がコマンドプロンプト画面に表示されます
  8. なぜ変数宣言のようなメモリに自由に名前を付けるシステムがつくられたのでしょうか まずはここで基本的なことを学んでみましょう
  9. コンピュータのメモリにはなぜアドレスがつけられているのでしょうか?アスキーコードのようなものがつくられたのはなぜでしょうか?なぜ変数宣言のようなシステムが作られたのでしょうか?
  10. 半角英数字が1バイト、全角文字のデータが2バイトに格納されているとはどういうことなのでしょうか  数値から画像データを呼び出すのが%c出力変換指定子の役割なのです 
  11. int型、char型の変数に格納されているにかかわらずアスキーコードを%c出力変換指定子を使ってprintf 出力表示するとアスキーコードに対応する半角英数字がコマンドプロンプト画面に表示されます
  12. GCCコンパイラについて
  13. これからは本当に遊ぶだけの楽しい世界になりそうです。 3連2分音符♪
  14. ヘッダファイル< float.h>とは変数の型floatに関する情報を含んでいます
  15. 素敵な詩 FLT_MIN = 1.175494e-038, FLT_MAX = 3.402823e+038   0.1
  16. ヘッダファイルとはなんですか?
  17. このヘキサ構造体、ヘキサ、フォーミュラのエピソードが本書を貫く基本的な概念になっています。
  18. ヘキサ構造体、ヘキサ、フォーミュラ(標準Cライブラリ、ヘッダファイル<stdio.h>の説明もありますの)
  19. C言語のヴァージョン C99 C11 ヘッダファイル<stdio.h>、標準入出力とは何のことでしょうか? 
  20. ソースコードがコンパイルされて機械語となりコンピュータに実行されていく様子を観察してみましょう
  21. CPU
  22. アドレスとは アドレスはコンピュータ内のメモリ,1バイトごとにつけられた番号のことです  
  23. int型の変数aは4バイトの格納容量を持ち1バイトごとにアドレスがつけられています。アドレスは16進数で表されるのでアドレスを表示するには16進数を出力表示する%p出力変換指定子をもちいます 0.2
  24. scanf関数は格納する変数のアドレスに宛てて数値を格納する。
  25. ヨハン・パッヘルベル
  26. %x出力変換指定子は変数に格納されている10進数整数値を16進数としてprintf出力表示する 
  27. 2進数を簡単に16進数に変換してみよう 0.4
  28. パソコンのアクセサリの電卓は2進数,8進数,16進数同士の計算もでき2進数から16進数への変換も簡単にできるんですよ。ぜひ使ってみてください。
  29. 今日は趣向をかえて音楽ソフトDominoをつかってみよ~のコーナーです💖
  30. では 音楽作曲ソフトdominoをつかって音楽をつくってみよう。
  31. 代入演算子 +=,  -= ,  *= , /=, の仕組みをみていきましょう。
  32. +=は加算代入演算子と呼ばれ変数が”🐦いま🐦”格納している数値に何らかの数値を加えたものをその変数に代入する働きがあります。a+=5;はa=a+5;を表しています
  33. 加算代入演算子をつかってsum+=a;と変数sumに変数sumが今格納している数値と変数aが格納している数値を加えたものを代入するなら変数sumには🌞🍊その足し合わされた数の総和🍊🌞が格納されます
  34. 加算代入演算子をもちいて🌞数値1と2と3の総和🌞を求めるプログラムを考察してみましょう。
  35. インクリメント演算子a++はaの格納している値に1を足したものをaに代入する,デクリメント演算子a--はaが今格納している値から1を引いたものをaに代入するという機能があります。
  36. インクリメント演算子++ ++aとa++の違いはどのようなときにでてくるのかな 0.1
  37. それでは++a++;はどのようにプログラム内で実行されるのでしょうか?
  38. 単項演算子+とー、二項演算子++の仕組みをくわしくみていきましょう。コンパイラによっては演算子は違った働き方をしてきます。
  39. 引き算 掛け算 割り算 を足し算で表現してみたい  まずは「引き算」を足し算のみを用いて計算してみます
  40. 次は 「掛け算」を足し算のみを用いて計算してみます
  41. 「割り算」を足し算のみで計算してみます そして なぜ整数値同士の割り算の計算結果が整数になるのかについて考察してみます
  42. 「%f出力変換指定子の小数点以下6位までしか計算結果を表示しない」 というしばりから離れてさらに小さな小数点以下の位の数をもとめる
  43. 音楽ソフトDominoをつかってCFGCコード進行で小さな曲をつくってみる。
  44. for文は命令文を繰り返し実行するシステムとなってるの  0.1
  45. for文の()内の初期化式、条件式、継続処理方法を書いたり書かなかったりするとどうなるでしょうか モンスター数値さん、お久しぶりです 0.1
  46. for文の()内の初期化式、条件式、継続処理方法を書いたり書かなかったりするとどうなるでしょうか 全部で8通りのパターンを考察してみよう
  47. それでは for文の8つの基本パターンで遊んでみる。
  48. for文を使って数値表をprintf出力表示してみましょう  エスケープシケンス¥tと¥nがふくまれたprintf文をfor文にくみあわせてみます
  49. 🍓命令文が繰り返されている部分🍓はfor文をつかって書き換えることができます
  50. for文と加算代入演算子を用いた数値の総和をもとめるプログラムを考察してみましょう🌞
  51. この章では陽気なscanfお蛇さん🐍と いっしょに scanf関数の性質をしらべてみましょう
  52. 新種の蛇 scanf 
  53. マイクロソフト社のVisual Studioをお使いの方はscanfではなくscanf_sとプログラムに記入してください Visual Studioではscanf関数をつかうとビルドエラーになります
  54. うねる蛇 ソーラーの片腕
  55. scanf_s関数はマイクロソフト社専用の特別製の関数でありマイクロソフト社以外のコンパイラをお使いの方は scanf_s関数はつかえませんのでscanf関数をお使いください
  56. 新種の蛇scanf お昼さがり 
  57. Visual Studioではscanf関数はそのままでは使えません。使用したい方はソースコードの冒頭に#pragma warning(disable: 4996)を記述してください
  58. 元気なscanf関数  
  59. 蛇フード
  60. 創作ファンタジー こうしてヘッダファイル<stdio.h>にscanfとprintfは格納されるようになったのか? 0.15
  61. scanf関数をつかって変数aに数値を格納するとき変数aは初期化されていても数値を受け取ることはできます
  62. scanf関数に%d出力変換指定子を用いてint型の変数に数値を入力、printf出力表示したときにたまにでてくるモンスター数値-1073741824を2進数で表してみる
  63. 7、15ビットのような奇数の単位でメモリに2進数のデータを格納すると2の補数のシステムはうまく機能しなくなります。ですので8、32ビットのように偶数の単位で2進数データは格納されるようになっています
  64. 自作関数を導入してみます 自分で関数を作製して使用することができます その方法はどうなってるのかな?
  65. 自作関数1 ソーラーといっしょに関数を自作してみましょう void newmadefunction(void)  0.1
  66. 関数の戻り値とは何のことでしょうか Int a=printfの表現になれましょう
  67. 🌞なぜ void newmadefunction(void){ printf("今日もよいC言語日和です。\n"); return ; } と自作関数が記述されるのでしょうか?(void)に注目
  68. 🌞なぜvoid newmadefunction(void){printf("今日もよいC言語日和です。¥n"); return ; } と自作関数が記述されるのでしょうか?returnに注目☆
  69. ⛵⛵⛵漁じゃ,ははは、漁じゃあ~~~🚢🌊🌊🌊🌊🌊🌊
  70. ソーラーとマックスの一本釣り int main漁
  71. 🌞自作関数2 変数xを引数にもつ自作関数void fanction(int x)について考察してみる int xをxと記述してもよいのでしょうか? 
  72. C言語大漁捕獲 戻り値を格納する自作関数 0.7
  73. 🌞自作関数3 C言語大漁捕獲 return y;によりyの格納している値を戻り値にもつ自作関数について考察してみましょう
  74. ハ長調とは何のことでしょうか 0.1
  75. 🌞自作関数4 main関数には なぜ先頭にInt型 がくっついているのでしょうか return 0; は 何のためにあるのでしょうか? 
  76. getchar関数はコマンドプロンプト画面から入力されたデータが数値、文字にかかわらず🍎自動的に文字として🍎 変数の型charに格納します 
  77. 論理式とはなんでしょうか 論理式は 0か1の値をもちます 
  78. 論理演算子&& 論理式かつ論理式のような組み合わせも論理式となり0か1の値をもちます 
  79. 論理演算子||は数学における和集合Uとはちょっと違います 0.1
  80. 今日は楽しいひなまつり 
  81. 論理否定 !演算子
  82. 論理否定 !演算子は論理式が持っている値を0なら1へ1なら0へひっくり返します。 
  83. if文から はじめてみよう。
  84. 複数の命令文をif文によって実行するにはブロック{}でくくります  
  85. if 命令文;else命令文;とif 命令文;else if 命令文;の違いを観察してみましょう。
  86. if文ネスト(入れ子)構造をもったプログラムををつくって実行してみましょう  
  87. if文ネスト(入れ子)多重構造をつくってみようっ  その2
  88. if文ネスト(入れ子)多重構造をよみとってみよう  その3 0.1
  89. カスタマイズが楽しいswitch 文
  90. scanf関数とswitch 文をくみあわせてみよう\(^o^)/ 
  91. switch 文のプログラムをif else文のプログラムで書き表してみましょう 
  92. while文もfor文と同じく命令文をくりかえし実行します
  93. コントローラーボタンの入力を受け付けるプログラムのプロトタイプを創造する
  94. if()continue;文はfor文の中でもちいられ if()の()内の条件式が1の値(真の値)を持つときはその繰り返しの回の命令文を実行しません 
  95. do{}while()文は()内の条件式が0の値(偽)となっても最低1回は命令文を繰り返すシステムです
  96. 後づけwhile文 do{}while()文の基本設定にもwhile文と同じく初期化式、継続処理方法、条件式が用いられます 例えばint a;do{a++;}while(a<5) のように記述します
  97. こんにちは 音楽ソフトDominoをつかってみよ~のコーナーです💖
  98. ヴィヴァルディ 四季 第一楽章を音楽ソフトMuse scoreとDominoで演奏してみる。
  99. break文でおはようございます。
  100. for文による繰り返しの中 if()continue文でとばされた回の命令文の代わりとなる別の命令文を実行させてみよう 猫の喜びの声が聞こえる・・・
  101. if() continue文を使用する際は()の中の条件式の記述方法にご注意ください 
  102. if()continue;文でもっともっと遊んでみる if(0)continue;文はどのように動作するかな? 天Cのフランス語と芸人
  103. for文にfor文を代入してみる   for文ネスト(入れ子)構造はどうなっているの?
  104. for文3重奏 for文{for文{for文}}  
  105. 🌞自作関数5 自作関数のプロトタイプ宣言をおこなってから自作関数の定義を行ってみます 
  106. 🌞自作関数6 💃ローカル変数とは ある関数の中で定義された変数のことです
  107. 🌞自作関数7 ローカル変数とは ある関数の中で定義された変数のことです その2
  108. 🌞ダミー自作関数8  ローカル変数とは ある関数の中で定義された変数のことです その3
  109. 🌞自作関数9 自作関数の引数はvoid f(int x)のように記述します。void f(x)と記述してはいけませんの
  110. まずは変数のスコープについて学んでみましょう。変数のスコープとは変数宣言された変数が使用可能な範囲のことです
  111. 🌞自作関数10 main関数内で自作関数f(int a)がf(1);と記述されている場合 1は《《自作関数の引数内で変数宣言されたint a;》》に代入されています。
  112. 変数のスコープと変数の寿命について学んでいきましょう。これらが理解できると どの位置で変数宣言をおこなえばよいのかがよくわかるようになります
  113. 🌞自作関数11 グローバル変数は 異なる関数同士でも共通して使えます そのグローバル変数のスコープ(使用可能な範囲)はグローバル変数宣言された行以下のプログラム全体となります
  114. 🌞自作関数12 グローバル変数宣言とローカル変数宣言のスコープ(変数宣言により作製された変数の使用可能な範囲)を考察してみましょう。
  115. ローカル変数のスコープ(変数の使用可能な範囲)は そのローカル変数が宣言された{}(ブロック)内となります
  116. 複数のローカル変数のスコープ(変数宣言により作製された変数の使用可能な範囲)を考察してみましょう。
  117. 複数のローカル変数の変数宣言のスコープ(変数宣言により作製された変数の使用可能な範囲)を考察してみましょう。その2
  118. 次に変数の寿命について学んでみましょう。変数に関するデータはコンピュータのメモリに保存されるだけでなく消去もされます。どの時点で消去されるのでしょうか?😊
  119. ローカル変数はそのローカル変数が宣言された{}ブロック内の命令文がすべて実行されるとメモリに保存されたローカル変数の名前、格納している値とともにコンピュータのメモリから消去されます
  120. 🌞自作関数13ローカル変数のデータ情報はローカル変数が定義されたブロック内の命令文がすべて実行されるとコンピュータのメモリから消えてしまいます。そこでデータ情報維持のためにstaticが用いられます。
  121. 自14static変数が用いられた自作関数が実行された後もstatic変数に格納された数値データは保存されますがローカル変数でもあるのでmain関数内で定義された同じ名前の変数には影響を与えません 
  122. 🌞自作関数15 自作関数void f(int x)のint xにmain関数で定義された変数aを代入しても変数aはmain関数のローカル変数のままです。
  123. void f(int x)型の自作関数の()内で変数宣言された変数xのスコープも自作関数の定義のブロック内となります
  124. void f(int x){}型の自作関数の()内で変数宣言されたint xに代入されたデータはブロック{}内の命令文が実行されるとメモリにつけられた変数名xと共にコンピュータのメモリから消去されます
  125. それでは変数のスコープをよりよく理解できる次のおもしろ問題にチャレンジしてみましょう。
  126. scanf関数をつかって変数aに数値7を格納してみます ただしこのプログラムでは5つのaの変数宣言が行われています 一体どの変数aに数値7は格納されるのでしょうか?
  127. scanf関数をつかって変数aに数値7を格納してみます ただしこのプログラムでは5つのaの変数宣言が行われています 一体どの変数aに数値7は格納されるのでしょうか?  解答で~す
  128. 配列の登場です 配列は とっても便利なお方💖です
  129. 配列の仕組みを学んでみましょう!
  130. 配列宣言により配列内に作成されるデータの入れ物である配列変数の数と配列変数に格納する数値の数の関係をしらべてみましょう
  131. 配列にはint型配列やfloat型配列などがあります。つまり配列に格納できる数値は整数値か実数値のどちらかのタイプの数値となっています。
  132. 配列をつかうと どのように簡単にプログラムが記述できるのか一緒にみていきましょう
  133. 配列に格納された数値の総和をもとめるプログラムを実行してみましょう
  134. 加算代入演算子+=をつかって配列に格納されている数値の合計を求めてみましょう。
  135. 変数aに変数bをa=b;と代入したように配列hairetuboxに配列hairetuhakoをhairetubox=hairetuhako;のように直接代入して中身のデータを渡すことはできません😊
  136. イラスト作製ソフトCLIP STUDIOをちょこっとご紹介いたします ぶーにゃんさんのお気に入りソフトなんです
  137. 私の愛機はCPU AMD FX8120搭載でした
  138. とても簡単にできる完全無音パソコン環境の構築の仕方(笑)
  139. scanf関数をつかって配列へ数値を格納してみよう
  140. 2次元配列を作製し数値を格納してみる。やはり簡単でした。
  141. 簡単な方法を使って2次元配列に数値を格納(初期化)してみましょう
  142. 3次元配列宣言を行い簡単に初期化してみる 
  143. おまけのコーナー 4次元配列宣言、初期化も行ってみよう
  144. おまけのコーナー 5次元配列宣言、初期化もできるか試してみよっかな 
  145. 数値だけでなく文字データ 'a','b','c'など を配列に格納してみようよ char型の配列宣言を行ってみます。もちろん簡単な初期化方法もつかってみます
  146. おまけのコーナー 9次元配列宣言、初期化をおこなってみよう 前半
  147. char型の配列に文字列nekoを格納しnekoをコマンドプロンプト画面にprintf出力表示してみよう
  148. もっと簡単にchar型の配列に文字列nekoを格納(配列の初期化)してみる 
  149. char型の配列にひらがなの文字列を格納してみます そのときひらがなの文字列はchar型の配列内に生成された配列変数にどのように格納されているのでしょうか?
  150. おまけのコーナー 9次元配列 後半 天国にいけるC言語入門技 天国にいけるまで手計算」
  151. 9次元配列をつかってあなたの健康度をチェックするプログラムを作製してみました さらにプログラムのバグの訂正に成功しました 
  152. おまけのコーナー 10次元配列宣言、初期化をおこなってみる
  153. おまけのコーナー 11次元配列宣言、初期化を実行してみる
  154. おまけのコーナー 12次元配列から24次元配列まで作製する 12次元配列から15次元配列までを作成してみる
  155. おまけのコーナー12次元配列から24次元配列まで作製する その2 16次元配列と17次元配列を作製する
  156. scanf関数をつかって半角英数字を1文字だけchar型の変数に格納する
  157. 文字列nekoをscanf関数をつかって配列に格納する。文字列を格納できるということは1文字の文字列だけ格納することもできます。やったね💖
  158. ひらがなの文字列ねこ もscanf関数をつかって配列に格納することができます 
  159. 🌞scanf関数をつかって空白を含んだ文字列Hello nyannkoを配列にとりこむことができます その際Hello nyannkoは配列内にどのように格納されているのでしょうか?
  160. scanfとscanf_sの違いとは何でしょうか?
  161. scanf_s関数には バッファオーバーフローを防ぐため入力文字数制限機能が付けられています
  162. 配列の中に格納されている文字列の文字数を数えるstrlen関数です 文字列が半角英数字の場合 
  163. 配列の中に格納されている文字列の文字数を調べるstrlen関数です 文字列が ひらがな、カタカナ、漢字の場合 
  164. 配列の中に格納されている文字の文字数を調べるstrlen関数です 文字列が絵文字🐈🐘🍅の場合
  165. sizeof演算子で配列の格納可能容量(バイト数)を調べてみます  
  166. おまけのコーナー 配列の中に格納されている🍋文字列🍋の文字数を数え上げるstrlen関数をつかって 配列の中に格納されている🍎数値🍎の数を数え上げてみよう
  167. 1次元配列でなく2次元配列のなかに格納されている数値の数を配列のなかに格納されている文字列の文字数を数え上げるstrlen関数を使って数え上げる。
  168. おまけのコーナー 文字列でなく数値を格納した配列の格納容量をsizeof演算子で調べる
  169. おまけのコーナー 実際に17次元配列に格納された数値の個数をsizeof演算子をつかって17次元配列の格納容量(格納できるバイト数)を求めることにより間接的に調べてみましょう。
  170. strcat関数を使って異なる配列内に格納されている文字列同士を連結させてみましょう  さらにfor文を使って文字列を繰り返し連続接続してみます
  171. ここでポインタ変数を導入してみます
  172. メモリとアドレスと変数の関係について学んでみましょう 
  173. ポインタ変数とは 変数のアドレスを格納するための変数のことです 0.2
  174. 変数のアドレスがポインタ変数に格納された場合 ポインタ変数をつかって変数内に格納されている数値をもとめることができます💖 
  175. 👇のエピソードをみればおわかりになられますように ポインタ変数の特徴は指定したアドレスの場所に格納されている数値を変更できることにあります 
  176. ポインタ変数をつかえば ポインタ変数にアドレスを代入することにより そのアドレスの場所のメモリに格納されている数値を変更することができます
  177. ですので このことを意識しているとポインタ変数の使い方をよりよく理解できるようになります
  178. 天国にいけるC言語入門 ヘキサ構造体 特別企画  佐月 詩さん 原作「フェアリーウェイト」2次創作映画〚ft王〛上映会 & 次回超大作告知
  179. 配列のポインタ変数とは一体何のことでしょうか?
  180. 配列には自分でポインタ変数を作製しなくとも配列を作った時点で配列専用のポインタ変数が用意されているのですの😚  
  181. 配列に数値を格納した場合の配列や配列変数のアドレスはどうなっているのでしょうか?調べてみます。
  182. 配列に文字列を格納した場合の配列や配列変数のアドレスはどうなっているのでしょうか?調べてみます。
  183. 文字列を格納するchar hairetu[ ]="nekoneko";とchar *hairetu="nekoneko";この2つを比較することによりポインタ変数の仕組みがより理解できるようになります
  184. 配列の代わりにポインタ変数をつかって文字列を格納してみます 
  185. Visual Studioでは1度変数宣言、配列宣言をおこなったならそのときと同じ変数名、配列名をつかって再度変数宣言、配列宣言を行うことはできません。🍓
  186. Visual Studioでは1度変数宣言、配列宣言をおこなったならそのときと同じ変数名、配列名をつかって変数宣言、配列宣言を行うことはできません。🍓
  187. 🌞🌞🌞ポインタ変数を使って文字列データをメモリに格納していく場合 1番最後にデータを格納したメモリのアドレスがポインタ変数に格納されます🌞🌞🌞
  188. 配列と違いポインタ変数はポインタ変数名を変更しなくても文字列を💖どんどん💖メモリに格納することができます
  189. ポインタ変数は1番最後にポインタ変数を使って文字列データを格納したメモリのアドレスを格納するために存在するので文字列データをメモリに格納するためのポインタ変数名はなんでもよいのです
  190. ポインタ変数hairetuは1番最後にポインタ変数を使ってデータを格納したメモリのアドレスを格納するために存在するので文字列データをメモリに格納するための ポインタ変数名はなんでもよいのです
  191. ポインタ変数をつかって文字列データがメモリに格納されたとき最後に文字列データが格納されたメモリのアドレスがポインタ変数に代入されます その様子を観察してみましょう🍓
  192. 文字列nekoをコンピュータのメモリに格納する char hairetu[]="neko"; と char *hairetu[]="neko"; では何がちがうのでしょうか?
  193. メモリに最後に格納された文字列データが配列変数に格納されるので配列変数に格納される文字列データは変化していきます。メモリに文字列データが格納されることと配列変数に文字列データが格納されることは別々の話
  194. 文字列を格納するchar hairetu[ ]="nekoneko";とchar *hairetu="nekoneko";の構造を文字列が格納される場所のアドレスを求めて比較してみます
  195. 配列システムはポインタ変数システムによって構成されています。そのことを考察してみましょう。🌞
  196. 配列システムはポインタ変数システムそのものとなっていることを考察してみましょう。🌞
  197. 配列ではできませんが 複数の文字列を1つのポインタ変数宣言を使い同時にメモリに格納してみます
  198. 別の言い方をするとデータが格納されているのは配列変数でなくメモリであり配列変数hairetu[0],hairetu[1],hairetu[2]・・・はそのデータをとりあつかうために存在しています
  199. おさらい 自作関数newmadefunction(int x);が実行されている間は ローカル変数xに格納されている数値はコンピュータのメモリに格納されていますが実行後は消えてしまうのでした
  200. 値渡しについてご説明いたします
  201. 実引数と仮引数とは?実引数から仮引数への値渡しとはなんのことでしょうか? 
  202. 実引数と仮引数とは?実引数から仮引数への値渡しとはなんのことでしょうか? 今度はメモリに電荷が蓄えられるという視点からお話してみたいと思います その2
  203. 実引数と仮引数とは?実引数から仮引数への値渡しとはなんのことでしょうか? 今度はメモリに電荷が蓄えられるという視点からお話してみたいと思います その3
  204. グローバル変数bを自作関数の引数の変数aに代入した場合も値渡しとなるためグローバル変数bは自作関数の操作を受けることはなくグローバル変数bに格納されている数値は変更されません。
  205. グローバル変数bを自作関数の引数の変数aに代入した場合も値渡しとなるためグローバル変数bは自作関数の操作を受けることはなくグローバル変数bに格納されている数値は変更されません。
  206. グローバル変数bを自作関数の引数となったグローバル変数bに代入した場合も値渡しとなるためグローバル変数bは自作関数の操作を受けることはなくグローバル変数bに格納されている数値は変更されません。
  207. おまけのコーナー 24次元配列を作製する  その3
  208. 参照渡しの具体例はmain関数内で定義された変数aのアドレスを自作関数内で定義されたポインタ変数ptxに代入することですね
  209. 🌞🌞🌞参照渡しとは自作関数の引数にポインタ変数をつかい実引数のアドレスをポインタ変数に渡す方法のことなのです🌞🌞🌞
  210. ですので変数aのアドレスに格納されている数値を表す*ptxをつかい変数aのアドレスに格納されている数値を変更することができます
  211. 参照渡しが行われるときの自作関数の構造を分析してみましょう そのために自作関数の部分を元の命令文の集まりに戻してみます
  212. すなわち main関数内で定義された変数aの格納している値を自作関数を経由して変更することができます
  213. main関数内で定義された配列に格納されている数値を自作関数を使って変更してみましょう。自作関数の引数が(int hairetu[])となっている場合 その1
  214. main関数内で定義された配列に格納されている数値を自作関数を使って変更してみましょう。自作関数の引数が(int hairetu[])となっている場合 その2
  215. main関数内で定義された配列に格納されている数値を自作関数を使って変更してみましょう。自作関数の引数が(int *hairetu)となっている場合🌞
  216. 参照渡しは ゲームキャラクターが移動することやゲームキャラのHPやMPの値が変化することと関係しています 
  217. 👆このことは ゲームキャラクターが移動することやゲームキャラのHPやMPの値が変化することと関係しています 
  218. 配列を自作関数の引数に設定しmain関数で定義された配列を代入することができます。その際ポインタ変数を使った参照渡しをされます 値渡しされる方法はありません 
  219. main関数内で定義された配列に格納されているデータをポインタ変数を使った自作関数によって操作を加え変更してみましょう そのため配列のアドレスを自作関数の引数に参照渡しする方法を学んでみましょう
  220. main関数内で定義された配列の配列変数に格納されている数値データを配列でなく 配列変数を自作関数の引数に代入することにより 自作関数に値渡しすることができます。
  221. 1つのポインタ変数宣言をつかって複数の文字や文字列をコンピュータのメモリに1度に格納する方法はあるのですが複数の数値を1度に格納する方法はないのです
  222. 自作関数の引数にポインタ変数宣言や配列宣言をつかってmain関数内で作成された配列のアドレスを参照渡しすることができます
  223. 自作関数の引数としてhairetuの配列宣言またはhairetuのポインタ変数宣言が行われた場合*hairetuとhairetu[0]、*hairetu+1とhairetu[1]・・・は等しくなります
  224. ポインタ変数や配列をつかって数値や文字、文字列 をコンピュータのメモリに格納する方法 まとめ
  225. if文とヘッダファイル<string.h>に格納されているstrcmp関数を使って 入力された文字列によって実行される命令文が変わるプログラムを作成してみましょう。
  226. この章ではハードディスク内にファイルを自作しデータを保存する方法を学んでいきましょう ゲームでいえばセーブデータを保存することにあたります
  227. ファイル構造体とはハードディスクのファイルにデータを保存する前にデータをメモリに格納するときの型でありファイルからデータを読み取ってメモリに保存するときの型でもあります🌻
  228. 👆ハードディスクにデータを保存したり、ハードディスクから保存されたデータをよみこむシステムはどのようになっているかをご説明いたします
  229. ファイルポインタ変数宣言とfopen関数の書式設定をおこないハードディスク内にデータを保存するためのファイルを作製します
  230. ファイルポインタ変数fpはポインタ変数なのでポインタ変数名fpのままでどんどん文字列をメモリに格納していくことができます
  231. ファイルポインタ変数とポインタ変数の違いは何でしょうか😊 ファイルポインタ変数は優れたポインタ変数なのです
  232. Visual Studioではfopen関数はそのままでは使えません。ソースコードの冒頭に#pragma warning(disable: 4996)を記述してください
  233. Visual Studioをお使いの方はfopen関数を使用するときはご注意ください そのままでは使用することができません。
  234. fputs関数とfprintf関数を用いてハードディスク内のファイルにデータを書き込みます。このときまずデータはファイル構造体を通してメモリに格納されてからハードディスク内のファイルに保存されます
  235. 👆ハードディスク内のファイルにデータを保存する場合、まずはデータはコンピュータのメモリに保存されてからハードディスク内のファイルに保存されます。
  236. オープンモード "w" でファイルを開くと開いただけでファイルは初期化されて前に格納されたデータはきえてしまいます
  237. 1つのファイルポインタ変数を使い複数のファイルのデータの読み込み、書き込みを実行してみましょう。ファイルポインタ変数の仕組みをもう少し詳しく観察してみましょう。
  238. ファイルポインタ変数宣言とfopen関数の設定を2つ行い同時にハードディスク内に2つのファイルを作製してみましょう。
  239. ハードディスク内のファイルにデータを追加で保存するにはファイルを開くとき オープンモード"a"をもちいます
  240. 実はハードディスク内のファイルにデータを保存することとfclose関数をつかってファイルを閉じることは関係ありません。
  241. fprintf関数によってデータをハードディスク内のファイルへ保存することと fclose関数によってファイルを閉じることは関係ありません
  242. ちょっと休憩しています
  243. 👇ハードディスク内に保存されているデータを利用する場合も、ハードディスク内に保存されているデータはコンピュータのメモリに保存されてから利用可能となります
  244. ハードディスク内に作成したファイルをオープンモード"r"で開きデータを読み込んでみます 
  245. ハードディスク内に作成したファイルをオープンモード"r"で開きデータを読み込んでみます 別versionで説明してみます
  246. if(fp==NULL)の代わりにif(fp=NULL)と記述することはできません。==は関係演算子で=は代入演算子となっています。
  247. if(fp=NULL)の代わりにif(fp!=NULL)と記述してみましょう。fp=NULLの=は代入演算子ですがfp!=NULLの!=は関係演算子です。ですので!=は=の否定形ではありません
  248. 🌞🌞🌞🌞🌞🌞🌞🌞🌞🌞🌞🌞🌞🌞🌞🌞🌞🌞🌞🌞🌞🌞🌞🌞🌞🌞🌞🌞🌞🌞🌞🌞🌞🌞🌞🌞🌞🌞🌞🌞🌞🌞🌞🌞🌞🌞🌞🌞
  249. ユーザーから渡されたデータはまずコンピュータのメモリに保存されるのはコンピュータの基本的なシステムでした
  250. 読み取りオープンモード"r"の代わりに追加書き込みオープンモード "a" をつかっても ハードディスク内のファイルに保存したデータをコマンドプロンプト画面に表示することはできません
  251. ハードディスク内のファイルにデータを保存する場合もハードディスク内のファイルを利用する場合も、そのシステムは機能しています
  252. 読み込みオープンモード"r"の代わりに新規書き込みオープンモード "w" をつかっても ハードディスク内のファイルに保存したデータをコマンドプロンプト画面に表示することはできません
  253. ファイルにデータがなにも保存されてない状態でオープンモード"r"でファイルをひらきデータを読み取りprintf表示したなら どのようなデータがコマンドプロンプト画面に表示されるでしょうか
  254. 👇実はハードディスク内のファイルを開くのにどのようなファイルポインタ変数を用いても構いません。
  255. 実はハードディスク内のファイルを開くのにfp,rp,spなど自由にどのようなファイルポインタ変数名を用いても構いません。なぜなら・・・
  256. このこともユーザーから渡されたデータはまずコンピュータのメモリに保存されるというコンピュータの基本的なシステムが関係しています
  257. オープンモード "w+" , "r+", "a+" について考察してみよう
  258. 読み込みモードと書き込みモードをあわせもつオープンモード”w+”,"r+","a+"ですが ファイルが開かれ閉じられるまでに1度に使えるのは書き込み機能か読み込み機能のどちらか1つだけです
  259. 読み込みモードと書き込みモードをあわせもつオープンモード"w+","r+","a+"ですが ファイルが開かれ閉じられるまでに1度に使えるのはfprintf関数かfscanf関数のどちらか1つだけです
  260. オープンモード”w+”,"r+","a+"が読み込みモードになるか書き込みモードになるかは最初にfscanf関数がつかわれるかfprintf関数が使われるかによって決まります。
  261. fprintf関数を使った後に fscanf関数を使ってみる
  262. オープンモード "w+" の新規書き込み機能について考察してみよう
  263. オープンモード "r+" の新規書き込み機能について考察してみよう
  264. オープンモード "a+" の追加書き込み機能について考察してみよう
  265. オープンモード "w+"の読み込み機能について 考察してみよう 今のところ読み込み機能が働くところを観測できません。読み込み機能は機能していないかもしれません。 
  266. オープンモード "r+"の読み込み機能について 考察してみよう
  267. オープンモード "a+"のハードディスクのファイルデータ読み込み機能について 考察してみよう
  268. fprintf関数を使った後に fscanf関数を使うと ファイル内のデータはコンパイル結果に正しく表示されません。
  269. fclose関数にはファイルを閉じるという機能のほかに ファイルの書き込みモード、読み込みモードを解除するという面も持っています
  270. 同じプログラム内で fprintf関数を使って保存された数値を fscanf関数を使って配列に取り込むにはデータを保存後1度ファイルを閉じて書き込みモードを解除する必要があります。
  271. ファイルを閉じて書き込みモードを解除せずに新たに別のファイルポインタ変数宣言を行って読み込みモードでファイルを開いてもfscanf関数を使ってファイルデータを読み込むことはできません。
  272. 👆この操作はゲームでいうとセーブデータを保存した後そのまますぐにそのセーブデータを開いて読み込むときに使用されます。
  273. fscanf関数を使った後に fprintf関数を使う場合でもfclose関数を使い1度ファイルを閉じ、読み込みモードから書き込みモードに変更する必要があります
  274. ファイルポインタ変数fpを引数に用いるfgetc関数を考察してポインタ変数の本質を垣間見てみましょう
  275. fgetc関数を使ってハードディスク内のファイルに保存された文字列から1文字だけ文字を読み取ってみましょう
  276. fgets関数をつかってハードディスク内のファイルに保存された文字列から複数の文字を用意した配列に格納しコマンドプロンプト画面に表示してみよう
  277. データをコンピュータが直接扱えるバイナリデータに変換しファイルに保存してみよう そのファイルはバイナリファイルと呼ばれます
  278. バイナリデータとしてファイルに保存されたデータをfread関数を使って配列に読み込んだ後コマンドプロンプト画面に表示してみます 
  279. fprintf関数には存在しないfwrite関数の第3引数について考察してみます fwrite(&hairetu[0],sizeof(int),1,fp);の1の部分ですね。
  280. fseek関数を用いてバイナリファイルからデータの読み込み開始位置を指定してデータを読みこんでみましょう 読み取り基準位置がSEEK_SETの場合 
  281. fseek関数を用いてデータの読み込み開始位置を指定してバイナリファイルからからデータを読みこんでみましょう 読み取り基準位置がSEEK_ENDの場合
  282. fseek関数を用いてバイナリファイルからデータの読み込み開始位置を指定してからデータを読みこんでみましょう 読み取り基準位置がSEEK_CURの場合
  283. コンピュータのメモリに効率よくデータを保存、そして使用する為に配列や構造体は作られています😊ゲームでは大量のデータを扱うので大変重宝されます
  284. 構造体を導入します。構造体structure Cubeを定義しcube1の構造体変数宣言structure Cube cube1をおこないます
  285. 構造体と構造体変数の名前の付け方を一緒に考察してみましょう
  286. 構造体変数のメンバ変数を簡単な方法で初期化してみます
  287. int型やfloat型と同じく構造体struct Cubeの型に構造体変数は格納されます つまり構造体struct Cubeとは変数を格納する型といえます
  288. 構造体と構造体変数を用いるとどのような点が便利なのでしょうか?
  289. 構造体struct Cube型の構造体変数cube1に同じ構造体struct Cube型の構造体変数cube2を代入してみましょう
  290. typedefを使い 変数の型名、構造体名などを新しい名前に変更することができます
  291. 構造体宣言と構造体名の変更を同時に行ってみます
  292. 新たに別の種類のデータを管理するために構造体に新たなメンバ変数を追加してみます
  293. 構造体の構造体宣言にメンバ変数として変数の他に構造体変数を加えてみます
  294. 変数構造体のメンバ変数となった他の構造体の構造体変数をもっと簡単に初期化してみましょう
  295. 自作関数の引数に構造体変数を用いることができます そしてmain関数内で定義された構造体変数を代入することもできます(この場合 値渡しとなります)
  296. main関数内で定義された構造体変数を自作関数内で定義された構造体変数に代入する・・・構造体変数の値渡し  マックス達はバカンスしています
  297. 構造体変数のアドレスを参照渡しすることによりゲームキャラの位置、ステータスデータを変更することができます ここでその仕組みを学んでいきましょう
  298. 構造体変数のメンバ変数に格納されている数値をポインタ変数をつかってprintf出力表示してみます
  299. main関数内で定義された構造体変数のメンバ変数のアドレスを自作関数の引数に構造体型のポインタ変数をもちいて参照渡しをしてみます
  300. 構造体の配列を導入します 複数のキャラクターのステータスデータを構造体の配列をもちいてメモリに格納、管理することができます。
  301. 格納した数値データを効率よくprintf表示する 構造体型の配列宣言を行い構造体型の配列を作製して複数の構造体変数のメンバ変数に格納された数値を構造体型の配列に格納してみよう その1
  302. 格納した数値データを効率よくprintf表示する 構造体型の配列宣言を行い構造体型の配列を作製して複数の構造体変数のメンバ変数に格納された数値を構造体型の配列に格納してみよう その2 
  303. 格納した数値データを効率よくprintf表示する 構造体型の配列宣言を行い構造体型の配列を作製して複数の構造体変数のメンバ変数に格納された数値を構造体型の配列に格納する方法 その3
  304. 構造体型の配列の簡単な初期化法と格納した数値データを効率よくprintf出力表示する方法について考察してみます   
  305. ここで出そろったメモリにデータを格納するためのいれもの、変数、配列、構造体、構造体型の配列の違いを実際に数値データを格納、表示してみて確かめてみましょう。 数値1を格納し数値1を出力する場合 
  306. 数値1から10を格納し、数値1から10をprintf出力する場合 
  307. 縦1.0 横2.0 高さ3.0 の立方体cube1の数値データをメモリに格納、それらの数値データを”文章”にくみこんでコマンドプロンプト画面にprintf出力表示してみます 
  308. 複数の立方体の数値データをメモリに格納、それらの数値データを”文章”にくみこんでコマンドプロンプト画面にprintf出力表示してみましょう
  309. 構造体の配列のアドレスを参照渡しすることにより複数のゲームキャラの位置、ステータスデータを構造体だけを使った場合より簡単に変更することができます ここでその仕組みを学んでいきましょう
  310. main関数内で定義された構造体変数に1人のゲームキャラクターのデータを格納し自作関数の引数に構造体変数のアドレスを参照渡ししてから自作関数によって構造体変数に格納されているデータを変更してみます
  311. 複数のゲームキャラクターのデータをmain関数内で定義された構造体変数に格納し自作関数の引数に構造体変数のアドレスを参照渡ししてから自作関数によって構造体変数に格納されているデータを変更してみます
  312. ちょっとおまけ 自作関数のポインタ変数に複数の構造体変数のアドレスが代入される様子を観察してみましょう
  313. main関数内で定義された構造体の配列のアドレスを自作関数の引数となっているポインタ変数に参照渡ししてmain関数内で定義された構造体の配列に格納されている数値データを変更してみたいと思います。
  314. main関数内で定義された構造体の配列のアドレスを 自作関数の引数となっているポインタ変数に参照渡しして からmain関数内で定義された構造体の配列に格納されている数値データを変更してみましょう
  315. main関数内で定義された構造体の配列に格納された2人のキャラクターのステータスデータを構造体の配列のアドレスを自作関数の引数であるポインタ変数に参照渡しして同時に2倍にしてみます。
  316. 構造体の配列をつかって複数のキャラクターのステータスデータを2倍に変更して表示するときの利点はfor文を使って命令文をまとめあげることができるという点にあります
  317. 共用体は構造体のそっくりさんです
  318. 共用体と構造体は何がちがうのかな?😊
  319. 共用体の仕組みをしらべてみましょう。
  320. 列挙体をつかって文字を数値のようにあつかってみましょう。
  321. 実は😝列挙体の文字定数には数値が割り振られています
  322. プリプロセッサの1つ マクロ をご紹介いたします
  323. マクロ2
  324. マクロス
  325. マクロをつかえば自作関数の引数にアドレスを渡す参照渡しの方法を使わなくてもとても簡単にmain関数内で定義された変数を直接、自作関数にかけて格納されている数値を変更することができます
  326. マクロで自作関数を作製する
  327. マクロによって作られた自作関数の特徴を考察してみましょう。
  328. マクロで定義された自作関数をつかってmain関数内で定義された変数、配列、構造体、構造体の配列に格納されている数値を変更してみましょう 参照渡しの方法に比べてプログラムがとても簡単になります
  329. マクロをつかえば自作関数の引数にアドレスを渡す参照渡しの方法を使わなくても簡単にmain関数で定義された変数を自作関数にかけて格納されている数値を変更することができます
  330. マクロで定義された自作関数を使って お手軽にmain関数内で定義された配列に格納されている数値を変更してみます。
  331. マクロで定義された自作関数を使って お手軽にmain関数内で定義された構造体の構造体変数のメンバ変数に格納されている数値を変更してみます。
  332. マクロで定義された自作関数を使って お手軽にmain関数内で定義された構造体の構造体変数のメンバ変数に格納されている数値を変更してみます。
  333. マクロをfor文やscanf関数の使われたプログラム内で便利に使ってみます
  334. マクロを使って条件付きコンパイルを行うことができます。
  335. 条件付きコンパイル その2 #undefと#ifndef
  336. 🌞🌞🌞🌞🌞🌞🌞🌞🌞🌞🌞🌞🌞🌞🌞🌞🌞🌞🌞🌞🌞🌞🌞🌞🌞🌞🌞🌞🌞🌞C言語の基礎事項の解説は以上となります。いかがでしたか? 😊ニコニコ       🌞🌞🌞🌞🌞🌞🌞🌞🌞🌞🌞🌞🌞🌞🌞🌞🌞🌞🌞🌞🌞🌞🌞🌞🌞🌞🌞🌞🌞
  337. 今日のお話は・・・
  338. プリプロセッサ 事前に定義されているマクロ
  339. ちょっとウォーミングアップ
  340. ちょっとウォーミングアップ たくさんの引数を持つ関数を考察してみる
  341. まずは自作関数f(a,b)型の引数表現に慣れましょう 
  342. 自作関数には引数にif文やfor文などの条件式で使用される変数をもつものがあります。 その1 if文の条件式内の変数を引数に持つ場合 0.1
  343. 自作関数には引数にif文やfor文などの条件式で使用される変数をもつものがあります。 その2 for文の条件式内の変数を引数に持つ場合
  344. 自作関数には引数にif文やfor文などの条件式で使用される変数をもつものがあります。 その3 配列につかわれる変数を引数に持つ場合
  345. 数値が変わる部分をもつ文章を表示する自作関数Sentenseを作製してみましょう 
  346. 数値が変わる部分をもたない”文章”を表示する(引数を持たない)自作関数Sentenseを作製してみましょう
  347. if文の条件式に代入する数値によって表示される文章を変更することができる自作関数SelectSentenseを導入する
  348. 自作関数SelectSentenseを他の自作関数にさりげなく追加してメッセージ文を表示してみましょう
  349. 自作関数のなかに自作関数を格納する 自作関数の2重入れ子  その1
  350. 自作関数のなかに自作関数を格納する 自作関数の2重入れ子  その2
  351. プログラム内の自作関数の使われ方が難しいと思ったら、自作関数をmain関数内に戻して考えてみましょう。
  352. 自作関数がどのように機能するか解りにくいときは自作関数の定義部分をmain関数内に戻して記述して理解してみましょう
  353. fwrite関数の第3引数について考察してみる
  354. それでは お話は次のシリーズへと続いていきます
  355. ファイルのパスはどのような経路で保存されているファイルにたどり着けるか、どのような構造でファイルが保存されているかを表しています。
  356. おまけのコーナー イースⅡ オープニング曲を音楽ソフトDominoで演奏させてみます