アキヒロの日誌

新社会人一年目の記録

c言語:「変数の寿命」について学んでみた ~c言語学習8日目~

今日はcの絵本での学習をひと通り終えました。

Cの絵本 第2版 C言語が好きになる新しい9つの扉

Cの絵本 第2版 C言語が好きになる新しい9つの扉

 

cの絵本で分からなかった事から、新たな目標とそれを達成するまでの道筋を立てたので簡単にまとめていきます。

まずは、

基本的に「苦しんで覚えるc言語」で学習する
ことを決めました。理由は、この本が痒いところに手が届く自分にとって分かりやすい本だったからです。
苦しんで覚えるC言語

苦しんで覚えるC言語

 
それでも分かりにくいところは、新明解c言語入門編を参考にしたいと思います。

 

それでは目標と道筋をまとめます。
・目標
→道筋
グローバル変数、ローカル変数のイメージを実行させて掴みたい
→「12章変数の寿命」を学習→2018/12/21 17:55完了 なんとなくイメージは掴んだ
・値渡し、参照渡しの違いを明確にしたい
→「12章変数の寿命」を学習してから考える
・構造体についてもう少し詳しく知り実行させてイメージを掴みたい
→「16章複数の方をまとめる」を学習
・ポインタを使ったプログラムを使ってイメージをよりつかみたい
→新明解c言語のポインタの章を学習して練習問題を解いてみる。他の書籍のポインタの説明を見て、よりポインタに対する理解を深める。
・動的メモリ確保とは何か知りたい。静的メモリ確保との違いなど→動的・静的の意味と活用法を知りたい
→「19章 動的配列」を学習
・ヘッダファイルの作り方、ファイルを組み立ててなどを知りたい
→「20章 複数のソースファイル」を学習
・制御文(if,while,for文など)の練習がしたい
→「7,8,9,10章」を学習→新明解c言語に移行してもいいかも
 
 
 
それから今日上記の内容を参考にして学んだことをまとめます。
 

下線部:メモ、大事だと思ったこと、気付き、など

太文字:分からなかったこと

「12章 変数の寿命」を学習
→わかったようなわからないような???
・ローカル変数について
→count関数でローカル変数を含むプログラムを実行
 →関数の中で寿命が終わる変数
 → ローカル変数が有効なのは、宣言された関数の中のみで、main関数内で値を与えても関数に反映されない
 →正確には、ローカル変数の寿命はブロック内で尽きる
 
グローバル変数について
→count関数でグローバル変数を含むプログラムを実行 
  関数外で宣言された変数。
  プログラム全体が終了するまで生き残り続け、 宣言されたソースファイル内の全ての関数から使用出来る。
 →グローバル変数はプログラム全体を通して最後まで生き残り、以前の数値を記憶している。
 →プログラム開始時に自動的に0に初期化される
 → グローバル変数は、関数外で宣言された変数。関数内のローカル変数と違い、どの関数からでも自由に使える。
 
・ローカル変数とグローバル変数
 →グローバル変数と同名のローカル変数では、ローカル変数が優先される。→???
 
・静的なローカル変数
 関数の中で静的な変数(ローカル変数)を宣言すると、グローバル変数のように数値を記憶をする。
 しかし、どの関数からでも使用できるわけではない
 →イマイチ使いみちが分からない
 
これからは少し意識してプログラムを書いてみる。
 
 
以上です。

 

 

今を生きることの重要性

昨日、次のようなツイートをしました。

 

久々に今の自分にとって必要な素晴らしい考えが浮かんだなと思い、ブログでも記事にしています。

 

今まで僕は過去のことを思い出しては、自分のやってきたことを認めてあげず、後悔ばかりしていました。「もっとああやっておけばよかったのにな~。」、「なんでこうしなかったんだろう。」というような考えがいつも頭の中に浮かんでいました。当然、今の自分にも自信が持てませんでした。その結果、常に自分の将来のことを心配しています。心配すると今やっていることに対しても集中できず、今やっていることの成果が思うように出ず、更に将来を心配して自信を失っていきました。

そうして自分は病気になってしまい、今年の10月から大学院を休学することになりました。そして今に至ります。

そこで僕は自問自答を繰り返し、二度とこのような経験(今までの自分の考えや病気に苦しんだ経験)を繰り返したくないと思い、ついに1つの仮説に至りました。

それは、

「今を生きる」

を意識すればもっと楽に毎日を過ごせるのではないかということです。

f:id:programingchance:20190623210532p:plain

John HainによるPixabayからの画像

 

今を生きるとはどういうことなのか?

それは、今、目の前にあることに集中することだと思います。

 

ではどのようにしたら目の前のことに集中できるのか?それは、とりあえずやってみる、手を付けてみることだと思います。

(より適切な集中法を知りたい方は集中メソッド的な本を参考にしてください。)

 

そして次に大事なことは、今日やったことを記録し、「自分は今日こんなに頑張ったんだ。今日はこんなにイイことがあった。」と言い聞かせることだと思います。

その結果、いつか自分に自信がついてくると本気で信じています!

 

自信がついてくれば、将来のことを心配しすぎないし、過去のことも後悔しすぎることはないでしょう。

 

 

過去のことを後悔しても過ぎたことは決して変えられません。

将来のことを心配しすぎても心配したことはそれほど実際に起こりません(経験談)。

つまり「考えすぎたところで何も変わらないよ」ということです。

 

23歳になって初めてこの事に気が付きました(とりあえず学生のうちに気が付けてよかったです)。今まで深く考えてこなかったのです。

あとは実践です。

もう一度まとめますと、

今を生きること

そのためには、

  1. 目の前にあることに集中する
  2. とりあえずやってみる
  3. 今日やったことを記録し自画自賛する

今を生きることを意識して毎日を過ごしていければなと思います。

 

 

[2019/06/25追記]

Twitterでフォローさせていただいているほっしーさん(@HossyMentalHack)は次のようなツイートを残されております。

 

 

「シンプルな勉強法」を読み始めました!

河野玄斗氏の「シンプルな勉強法」を読み始めました!

 

今回も、「東大読書(東洋経済新報社)」で学んだ、読解力を養うための仮説作りをしておきたいと思います。

 

「読む力」と「地頭力」がいっきに身につく 東大読書

「読む力」と「地頭力」がいっきに身につく 東大読書

 

 

 

仮説作り:

①目標

今より無駄にならない新しい勉強法を知り実践したい。

著者が数々の実績を残すことが出来た理由を知りたい。

②目標達成までの道筋

(1)勉強効率を最大化する「モチベーション」について

(2)逆算勉強法について

(3)勉強を成功へ導く方法について

(1)~(3)を学べば目標達成!!

③現状

 

・自分なりの点数を上げるための勉強法を持っていて、点数を上げてきた実績はある。

→もっと効率的で確実な方法や考え方があれば知りたい。

・東大生の普段の勉強法についてあまり聞いたことが無い。

・時々、空回りしてしまうことやパニックになってしまう事がある。

 

 

今後、「自分なりの気付き」、「これはためになったなという内容」、「これだけは覚えておきたいという内容」、「全体の感想」をまとめる予定です。

自己啓発本との付き合い方について考えてみた

最近の自分の生活を振り返ってみると、自己啓発本自己啓発メディアの閲覧が多くなってきているなと感じる。

 

そこで思った。

 

それって応急処置になっているかもしれないが、問題解決能力が退化し始めているのでは、と。

つまり、自分の頭で解決しようとする姿勢を忘れてきているのではないかということだ。

 

自己啓発は一見効率的に思えるかもしれない。

しかしそれと同時に、人間に自分自身で考えさせないようにする作用があることも覚えておいたほうがいいのかもしれない。

 

 

果たして最適な自己啓発本の使い方はあるのだろうか?

自分の中ではっきりとした答えは出ていないが、自分なりのやんわりとした結論は、

本当に困った時に効果を発揮するのが自己啓発本。また、基礎の部分を固めることにも有効。それで軌道に乗って新たな問題に出くわしたら、自分の頭でも考える癖をつける。そして自分なりの答え(変化しても構わない)を出していく。

これが僕が今の所考えられる自己啓発本の使い方だ。

 

 

 

色々な方の意見を頂きたいです。

宜しくお願いします。

ブログで日々の学習記録を残すメリットとは?

自分は、日々、c言語学習の進捗報告をブログ記事にさせて頂いております。

そこで、ブログで学習記録を残すことにはどんなメリットがあるか考えてみました。

 

まずはじめに、ブログは様々な人が閲覧するものですから誰でも見やすい記事を書こうとします。次に、見やすい記事を書くには、その日に学んだこと、分かったこと、分からなかったことを的確に把握しようとします。言い換えると、自分の勉強をより客観的に見れるようになるという事です。

その結果、次のような3つのメリットとして挙げられると思います。

  1. 分かったことを書くことで、自信に繋がる。
  2. 分からなかったことを書くことで、次の目標が定まりやすくなる。
  3. 学習の道筋を記録しておくことで、自分の中でその学習の「地図」を作ることが出来る。(これは次の目標を定め、それに向けて新たな道筋を立てるときに、非常に役に立つと思います。)

このようなメリットを可視化しておくこと自体にも意味があると思っています。

 

当たり前の事のように思われますが、とりあえず書かせて頂きました。

 

 

c言語学習7日目

今日も進捗報告をさせていただきます。

 

c言語の学習を始めて今日でちょうど一週間になりました。

ここで改めて、学習の目的をはっきりさせておこうと思います。

目標:
c言語の基本的な文法を理解し、自分である程度のプログラムが書けるようにする(研究のための道具の使い方を学ぶ)。
高速に処理されるプログラムが書けるようになりたい。
c言語の知識を流体シミュレーションに生かしたい。
目標までの道筋:
・「cプログラミング入門以前」→コンピュータの基本的な知識を養う
・「cの絵本」→c言語の基本的な文法を理解する
・「苦しんで覚えるc言語」→cの絵本で足りないなと思ったところを補填する、基礎文法の全体把握
・「新・明解c言語入門編」→苦Cで分からなかったところの解釈、cプログラミングの練習問題を解く
・研究を少し始めてみる
→研究で必要なc言語文法の把握、必要な熱流体関係の専門知識の把握をする(理解しようとすると自分だけでは限界がありそう)
・フロースクエアで流体シミュレーションの雰囲気を掴む
現状:
・「cプログラミング入門以前」→一周した→理解が足りていないところもありそう
・「cの絵本」→c言語の基本的な文法を理解する→説明不足な部分もあり深い理解は得られていない
「苦しんで覚えるc言語」→ポインタ学習中
 
 
このような感じで、目標、目標までの道筋、現状を書いてみました。改めて可視化しておくことで、PDCAサイクルが回しやすくなると思います。あとは実行するだけです!!
 
 
 
 
 
 
 
 
 
 
今日は本格的にポインタの学習に入りました。
研究で扱うかは分かりませんが、c言語では重要な概念らしいのでとりあえずやってみたという感じです。
 
進捗の詳細:
「苦しんで覚えるc言語
15章
・ポインタという単語
 →ポインタとはアドレスを扱う3つの機能の総称→ポインタ型、ポインタ値、ポインタ変数
・ポインタ変数を実際に使ってみる
 ・&によるアドレスの代入 
 ・*によるモードの切り替え
→ポインタ変数の使い方は、ショートカットとして使用する
・引数による情報の受け渡し
 ・ポインタ型の引数
 →ポインタ型の引数を使用する場合、2つ以上の情報を返すことが出来る
 →戻り値を使う場合、常に1つの情報しか返すことが出来ない
 ・配列型の引数(→正直理解が難しかった)
 →配列型の引数は、
  ①素数が完全に無視される
  ②関数内で配列の値を変えると呼び出し側まで変化する
 →関数には配列ではなく配列の一番目の要素のアドレスを渡しており、配列型の仮引数をもつ関数宣言はポインタ変数の宣言になっている。
・配列とポインタの関係
 →正直本質がつかめない→もう数回読んでみる必要があるかも
 
 
 
 
わからないこと:
「ポインタの本当の使い方は、ショートカットとして使用することです。Windowsのデスクトップに並んでいる、あのショートカットと同じです。ショートカットは、どこか別の場所にあるファイルを指し示すファイルです。ショートカットを開けば、その指し示しているファイルが開かれます。にも関わらず、ショートカットは指し示すファイル自体ではないので、ショートカットはどこにでも自由に作ることが出来ますし、複数個作ったり削除したりしても、指し示すファイルには何の影響もありません。これこそが、まさにポインタの役割そのものです。ポインタ変数に、実際に存在する変数のアドレスを記憶しておけば、そのポインタ変数が使える場所であれば、元の変数が使えない場所であっても、ポインタ変数を通常変数モードに切り替えれば、元の変数と同じく使うことが出来ます。
まさに、ショートカットのような働きをさせることが出来るわけです。」(「苦しんで覚えるc言語」より引用
↓↓↓
Q:そのポインタ変数が使える場所元の変数が使えない場所はそれぞれどこなのか???
 
②動的なメモリ確保とは何か
 
③ポインタ演算のメリットは何か
 
 
 
感想:
正直なところ、今日は分からなかった事が多数あり、また、分かっていないこところが分かっていないという印象を受けた。
まだまだポインタについては学習の余地があるかなと思う。
今日の最大の学びは、関数を使用する時に、ポインタ型の引数を使用することで2つ以上の情報を返すことが出来ることである。又、戻り値を使う場合は常に1つの情報しか返すことが出来ないということである。
 
 
今後:
c言語学習で過去に分からなかったことを列挙してみる
→今後の細かい学習方針(手順など)を考えてみる
 
 

f:id:programingchance:20181217220233j:plain

痒いところに手が届く本だと思います。初心者に非常にオススメです!!
 
 
 
 
 
 
 

c言語学習6日目

 

今日もc言語の学習進捗を報告していきます。

現在は基本的に、

Cの絵本 第2版 C言語が好きになる新しい9つの扉

Cの絵本 第2版 C言語が好きになる新しい9つの扉

Cの絵本 第2版 C言語が好きになる新しい9つの扉

 

 

で勉強しています。

今日はcの絵本で説明不足だなと感じたところを

苦しんで覚えるc言語

苦しんで覚えるC言語

苦しんで覚えるC言語

 

で補填しながら学習を進めました。

それでは記録していきます。

 

 

下線部:メモ、大事だと思ったこと、気付き、など

太文字:分からなかったこと

構造体
→複数の型の変数をひとまとめにしたもの
構造体の作り方
・構造体とは何か
・構造体の宣言の仕方
 ・構造体テンプレートの宣言
 ・構造体変数の宣言
 →書き方が二種類ある
・構造体の初期化の仕方
・構造体メンバへのアクセスの仕方
・構造体とポインタ
・構造体と配列
 
わからないこと:
ポインタを利用するメリットや利用法
→なぜアドレスを値とする変数(ポインタ)を定義する必要があるのか??
目標:ポインタがなぜ必要なのか理解する
「15章 ポインタ変数の仕組み(苦しんで覚えるc言語)」
・メモリとは
・アドレスとは
・変数とメモリの関係
→「変数と配列がどのようにメモリに格納されるか」
→配列名は配列の最初の要素のアドレスを表している
→変数のアドレスが必ずしも連番にならないことを確認した
→配列の要素のアドレスは連番になっていることを確認した
 
・変数や配列(要素)のアドレスを表示する必要性
c言語の関数の仕組みに関係しているらしい
 ・関数について 11章(苦しんで覚えるc言語
  ・プロトタイプ宣言
  ・自作関数の呼び出し
  ・関数に数値を渡す方法→実行した
  ・関数から数値を返す→戻り値を返す関数のプログラム→実行した
 ・「値渡し」と「参照渡し」の違い→よくわからない→とりあえず「15章 ポインタ変数の仕組み」を読み続けてみる
 
15章(苦しんで覚えるc言語
・ポインタという単語
 →ポインタとはアドレスを扱う3つの機能の総称
 →ポインタ型、ポインタ値、ポインタ変数
 

 

f:id:programingchance:20181204171359j:plain

ついに最終章を迎えました!

f:id:programingchance:20181217220233j:plain

cの絵本の補填にはうってつけの本だと思います!