ポインタの分からないところ 追記

友人より、「ポインタの宣言

  T *ptr;

があるときに、次の2式

  ptr = ptr + 1;

  ptr = (T *)( (int)ptr + sizeof(T) );

が同じになるよ」とアドバイスをもらったので、とりあえず確認するためのファイルを作ってみた。

 

それがこんな感じ。

f:id:lightology:20170306004347p:plain

 

もともとほしい結果は、

  #define DEBUG 0

とした時のもので、アドバイスを反映させてみたのが、画像にあるとおりの

  #define DEBUG 1

としてるやつ。

 

確かに、同じ結果になる!

 

なるほど。

ポインタをインクリメントするときは、ポインタに格納した番地をType型のサイズ分1増加する、ということを裏でやってるってわけか。

 

早とちりしてなければ、これで良さげ。

ポインタのわからないところ

配列 a[5] と、その配列の先頭 a[0] へのポインタ ptr があるとする。

このときに、*ptr は a[0] を指し、インクリメントをすると a[1] を指すのだが、これは何をインクリメントしているのだろうか。

 

つまり、「*ptr が a[0] を指し、*(ptr + 1) が a[1] を指す」というときの、+1がどこに足されているのかが、よくわかっていない。

調べてみると、うちのPCでは「配列 a の番地が 6 ずつ飛んでいる」わけだけど、これと上のことが、つじつまが合わない気がする。

a[0] を指すポインタには、a[0] の番地が格納されいてるはずで、a[1] の番地を指してほしければ、+6しなければいけないはずでは?と思うんだけど、よくわからない。

 

+1 を +6 に置き換えてるってことでいいのか?う~ん・・・。

コマンドライン引数(その2、Visual Studio からコマンドラインへ)

「新・明解C言語 実践編(柴田望洋著)」を Visual Studio で勉強していると、コマンドラインのところで、いちいち戸惑っていた。

これは中級編を勉強していた時もそうだ。

 

前回は、

1.エクスプローラーを開く( [Windows キー] + [E] )

2.実行したい exe ファイルがいるフォルダを開く(ここが地味に面倒)

2.exe ファイルのプロパティを開く( [Alt] + [Enter] )

3.フォルダの場所をコピー(ここはマウスを使うのでストレスたまる)

4.コマンドプロンプトを起動( [Windows キー] + [X] +[C] )

5.「cd フォルダの場所」を入力

と、この手順でコマンドラインを実行する手筈を整えていた。

 

だけど、これだとだいぶ面倒なので、上の操作をやらず、さぼって先へ進んでた。

ただ、実践編に入っても出てきて、やはり「さぼってちゃ理解が進まない」という結論に至った。

それで今回、上の手順がもう少し楽になることが分かったので、忘れないように残すことにした。

 

その手順は、

1.ソリューションエクスプローラへ移動( [ctrl] + [tab] +矢印キー)

2.右クリックで「ソリューションをエクスプローラーで開く」を選択

  ( [プロパティーキー] + [X] )

3.目当ての exe ファイルのいるフォルダへ移動(Debug のところ、移動は楽)

4.アドレスバーに移動( [Alt] + [D] )

5.「cmd」と入力して [Enter] を押す

これで、目当ての exe ファイルをコマンドプロンプトで実行する手筈が整う。

 

今回、いろいろ調べたおかげで、2点楽になった。

1.目当ての exe ファイルのいるフォルダへ移動(上記手順1、2、3)

2.コマンドプロンプトで目当てのフォルダへ移動(上記手順4、5)

特に、2番目の方は gnuplot 使うときも重宝しそう。

コマンドライン引数(その1)

「新・明解C言語 中級編(柴田望洋著)、6-4 コマンドライン引数」だけど、実行は全部 Visual Studio に投げてたから、本と違う結果が出続けてた。

 

「まぁ処理系の違いだろ」という訳の分からない思い込みのまま、最後まで進めると、

1.calend                  → 今月のカレンダーを表示

2.calend 8               → 今年の8月のカレンダーを表示

3.calend 11 2016    → 2016年11月のカレンダーを表示

という3種類が並んでて???

 

そこで、「コマンドライン」の文字にはたと気づく。

・・・コマンドラインって何?

 

そう。これが分かっていなくて、相当おバカをやってた。恥ずかしい・・・。

 

というわけで、いろいろ調べて、コマンドプロンプトから実行することにした。

具体的には次の通り。

 

1.次を入力(List 6-13 で作成した chap06/argtest1.c の exe ファイルがいるフォルダへ移動)

cd C:\Users\***\Documents\Visual Studio 2015\Projects\新・明解C言語/中級編\chap06\calend\Debug

2.教科書通りに calend を入力 → 今月のカレンダーが表示

3.次は calend 8 を入力 → 今年の8月のカレンダーが表示

4.calend 11 2016 を入力 → 2016年11月のカレンダーが表示

 

というわけで、無事、本にいてある通りの起動・実行例がコマンドプロンプトに表示された!

 

まぁ、今までコマンドプロンプトに触れないようにしてた付けが回ってきた感じだな。

でも理解が深まったから良しとしよう。

 

C言語はじめました

C言語の勉強を始めました。

 

と言っても、始めたのは年末31日からなので、2か月目に突入しているわけだけど・・・。

 

なぜこのタイミングでブログを始めるのか。

まぁ、まえまえから書こうかなとは思ってたんだけど、いまいち気が乗らずに書いてなかった。

ただ、「C言語を勉強していて、つまづいたところを記録しておいたほうがいいかもしれない」という結論に至り、書き始めることにした。