53歳からの挑戦、プログラミング、英会話、筋トレ -2ページ目

53歳からの挑戦、プログラミング、英会話、筋トレ

若者のすなるプログラミングというものを50歳の私もしてみんとてするなり
とりあえず、C言語から始めます。

C言語の文字列についての(2)だよ。

文字列を配列st[]"Apple juice"として入れているんだけどね

それを表示するのに外の関数を使っているんだよね。

ちなみに関数のプロトタイプ宣言がめんどくさいから先に関数を宣言したよ。

関数str_check1へは&st[0]としてアドレスを渡しているけど受けるほうは配列的に受けているね。

これを配列的扱いとか配列イメージと言ったりするらしいよ。

こんな扱いができるなんてよくわかんないよ!!

 

でね、関数str_check2へはstと言う配列名を使用して配列の先頭アドレスを渡してるね、

受ける方はポインタだよね。この時の*は配列宣言としてchar *で考えれば、受けるのはst2になるからわかるよね。

ちなみに、ポインタも型があってchar*point*poなどと宣言するよ。

po++などとしたときの次のアドレスまでのバイト数がcharとintとで違ってくるから合わせとけってことかな

 

まあ、関数の結果は同じだね。だけど配列的に使ったほうが添え字が使えるから便利かな?

 

 

今日のC言語の勉強はポインタだよ。

 

僕自身がこんがらがっていた所を明々確々に書くよ。

int* p の* と *p の*は意味が違うって事なんだよね!!

int* p;  //この時の int* がポインタ宣言なんだよね pがポインタ変数になるんだよ。

でね この書き方は int* pと書いても int *p と書いても同じなんだよね

で宣言の時の*はint*とセットで使用していると考えたほうがいいんだよね。

この時のint*で宣言文なんだね

で、宣言後の使用時には

p=∑  なんて書き方をするんだよね。これはsumのアドレスをpに入れてるんだろうからまぁ問題ないよね。

では次に 

                p=∑

       *p=235;

なんて書いてあるとどうかな? この時のpはsumのアドレスを保持していて、sumのアドレスに235を代入してるんだろうけど、

この時の*はpに格納さえているアドレスの示す先を表現しているんだよね。

 

で、何が言いたいかと言うと、int *p と書いた時の*と *pと書いた時の*は意味が違うんだよね。

 

それから関数の引数でも同じで func1(int *p){...............}なんて書いてあると*pを引数に感じるけど、実際はが引数なんだよね

(int* pで宣言している。はポインタ変数だよ、そのを引数としてますよと言った感じかな)

 

C言語って紛らわしいね。

 

 

 

C言語の文字列についてだよ。

 

とりあえず、文字列ってやつは\nが出てくるまでの文字の羅列って事ですよ。(多分)

C言語の勉強をするうえで 本は高いよね。

また、文体が教科書調で僕なんかアレルギー反応が出るんだよね。

でね、C言語の勉強をするうえでおすすめサイトを紹介するね。

無料だからよかったら見てみ。

 

初心者のためのポイント学習C言語 : 丁寧に作られているよね。感動です。

C言語はやっぱりポインタが面倒だよね、、、

 

ポインタへのポインタはダブルポインタと言う言葉で表現して**を二つ付けて宣言するらしいよ。

具体的には下記の通りだよ。

int **poで示しているよね。

ちょっとわかりにくくなったからエクセルで表を作ってみたよ。

 

以前作ったプログラムも下にのせておくので見比べてみるといいと思うよ。

関数で表示させてるパターンと前回やったmain内での表示の2つだね。

int *po[5] の部分がポインタ配列の宣言だね

ポインタにはアドレスをぶっこむから、

po[0]=&aの部分でアドレスをぶっこんでるね

だから、

po[i]は配列に入っているa,b,c...それぞれのアドレスだよね。

&po[i]は配列そのもののアドレスだよね

*po[i]は配列poに入っているアドレスに格納されている値だね。