スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

関数の続き~!

前回に引き続き関数についてです。
今日は変数の宣言部分からでしたね!

   int result;

まぁ特別なことをするのではなく
今までもやってきたように「その処理の中で使う変数をここで宣言する」だけなのです。
今回は関数の最初にこの変数の宣言をしていますが「関数の最初で宣言しなくてはならない」というルールはとくにないのです。
実際にはその変数を使う前なら関数の中のどこで宣言してもOKとなっているようです。


では次~
処理をする部分でしたね。

   if(a>b)
   {
      result = a;
   }
   else
   {
      result = b;
   }


ここに「関数が実際に何を行うのか」という処理を書いていきます。
今回の例では引数に与えられた二つの a と b を比較して大きい値のほうを返値としてかえす!
という処理を書いています。
文法的にはif文を使って 変数result に大きいほうの値を代入させています。


では次~
終了部分ですね。

   return result;
}


これが終了部分です
ここに出てきた return これが関数の終了を知らせるポイントになります。
これは その後ろに書かれている変数返値として返す という意味合いを持ちます。

このreturnは 最後 ではなく 途中でreturnすることも可能のようですが
(例えば今回の例では変数用のresultを宣言せずに途中でreturnを使う)
例:
int large(int a,int b)
{
   if(a>b)
   {
      return = a;
   }
   else
   {
      return = b;
   }
}
こんな感じになります。
しかしながらこのような使い方はプログラムを見づらくしてしまうこともあるといいます。
やっぱり関数の最後に一まとめでreturnしたほうがいいと思います。

以上で関数の作り方は終わりです。
なんとなくわかってもらえたでしょうか?
私もまだ手探り状態ですが毎日がんばっていこうと思っているので
もしこのブログをみていてC言語に興味を持った方がいましたら一緒にがんばりましょう!

では、明日も。
がんばるぞー('A`)おー。

関数ってどんな感じ?こんな感じです!

前回に続いて今日も関数です。

今日は関数を本格的に勉強していきましょう~
まずは関数の構造から勉強したいと思います。
どんな風になっているのでしょうか?

* 開始部分
* 変数の宣言部分
* 処理をする部分
* 終了部分


大まかにこの4つのブロックに分かれているようです。
このような形は今までのプログラムでやってきた部分でもあるので理解しやすいとは思います。

では例題を見ながらいってみましょうか!

int large(int a,int b)
{

   int result;

   if(a>b)
   {
      result = a;
   }
   else
   {
      result = b;
   }


   return result;
}

これは与えられた2つの整数のうち大きいほうの値を返す。という関数をつくっています。
この例を見ながら作り方や仕組みを理解してしまいましょう!
今回は大きい値をかえしたかったので関数large()をつくっています
全体像はこんな感じになります。

先ほど記述した4つのブロックごとに色を分けて書いてみました。

☆まず開始部分の説明から~

開始部分というのは
返値の型 関数の名 (引数の型 引数の名 , 引数の型 引数の名 , ・・・・・・・)
この規則に基づいて書かれています
「関数の開始部分はこの関数はどういうものなのか!ということを物語っているぶぶんなのです」

~返値の型~
関数は結果を返値として戻すことが多い。
返値の型は関数の開始部分で定義する。
          ↑(なんのため?)
間違った型が返った場合エラーメッセージがでる。

また、返値を返さない関数もあるのでその場合は返値の型部分に「void」と書く決まりがあります。

int~~~(・・・
[int型の返値を返す関数]
void~~~(・・・
[返値を返さない関数]


~関数の名~
ここの関数は自分で作るから名前は好きなものをつけます。
好きなものといってもあまりに適当すぎると「その関数が何をするのか!?」が見てすぐにわからない。といった状況になります。
それでは作業も進まないものです。
名前はそれを見て関数が何をしているのかすぐに想像のつくものにしましょう!

~引数の型 引数の名~
カッコの中に引数の型と引数の名前をかきます
引数というのは関数に処理をしてもらうために渡すデータのことを言います。
ここでは返値のときと同じように 引数の型 を教えます。
この理由も返値とおなじように、実際関数を使うときに違う型の引数を渡そうとすると間違ってることを教えてくれるのです。

引数の名は基本的に何でもOKです。
この関数を呼んで使っているところの引数の名前と同じじゃなければいけない!という制限もないそうです。
関数を作るうえでわかりやすければ大丈夫!とありました。

今回の例題では引数の数は2個なのでint large(int a,int b)
と書いていますが関数ごとに「どれだけのデータが必要です!」という部分が違いその部分によって数が決まってきます。
たくさん必要な場合はカンマで区切りながら必要な分横に並べて書けばいいそうです。
( 型 名前 , 型 名前 , 型 名前 , 型 名前 , 型 名前 , 型 名前 )

さて、、ここまで出関数の開始部分の書き方はもうバッチリですよね?
明日は変数の宣言部分から勉強していきましょう!

がんばるぞー('A`)おー。

いよいよ関数!

今日からは 関数 について学んでいきます。

まず。恒例の(ぇ
疑問から解決~

そもそも関数ってナニ?作るの?
作ります!!!
まず知っておきたいのは「大きいプログラムというのは機能ごとに分けた小さな単位で開発をしていくものである」
そしてその小さく分けた 単位 が 関数 である。
ふむふむ・・・?
ただ単に分けるだけではなくて同じような処理は一箇所にまとめておいてそれを呼び出したほうがプログラミングの効率がいいそうですよ!
しかも小分けにしておけば「ぜんぜん違うプログラムのときにその関数を再利用する!」ということが可能になるそうです。そうなると新しいプログラムのときはその処理については新たに作る必要がなくなるそうです。
なんだか便利そうだなぁ。

じゃぁ小分けしてる関数ってどうやって使うの?
関数はいろいろな箇所から呼び出して使うことができる
呼び出せるのか?ってことは今までとは違った場所にあるのかな?

じゃぁ具体的に関数ってどんなことしてるの?
関数を呼び出すと(時と場合によってはデータを渡す)、なんらかを行う(時と場合によっては何らかのデータを返してくるという役割
渡すデータを引数(ひきすう)といい、返してもらう結果を返値(かえりち) というそうです。

ふむ。。。?
何かを与えて何かを返してもらう・・・?か。
アレですね。家庭用の パン焼き機 みたいな機械を想像するといいらしいです。
なかに材料を入れて、中で何か色々してくれて、作られたものが出てくるイメージですね
関数

明日からは関数の構造について勉強したいと思います
がんばるぞー('A`)おー。

文字列!!

今日は文字列を勉強していきます
まずは基礎からですよ~

まず文字列ってなに?
複数の文字の集まりを文字列っていいますよ~
ふむふむ。ソノママデスネ?

一文字の場合は「文字」と呼んで「文字列」とは別の物だって勉強しましたよね!

そして文字型変数の配列ですよ。つまり配列変数と扱いは同じである
文字列の変数は「char」で宣言される(前でてきましたよね?

今まででは数値によるプログラムの例を多く取り上げてきましたが実際には数値の計算と同じくらい重要となっているのが「文字列」だそうです

C言語というのはほかの言語の中でも文字列の扱いが特殊といわれているそうです。
難しいのかしら・・・・・・・?('A`)

でも「文字列が得意」というのもC言語の特徴らしいです。

C言語には「文字列型」というものが用意されていないそうです。
ではどうやって文字列をあつかっているのでしょうか?
それは「文字」の列。つまり「文字型の変数」の「配列」となっているそうです。
いわれてみると納得ができるような。。

なるほどね~
では例題をふまえてもう少し踏み込んで勉強していきましょう!

char i[6];

i[0] = 'H';
i[1] = 'e';
i[2] = 'l';
i[3] = 'l';
i[4] = 'o';
i[5] = '\0';

このようにして i を表示させたらこうなるそうです
Hello
まずは上から。
charの配列を宣言しているわけですね。
その個数は[6]←ここで6個ときめています
このサイズは格納する文字列の長さによって変化するのでそのつど考える必要があります。
今回では文字の数の5個と\0の1個をあわせた6個としています。
ですが余裕を持たせて多めに決めておくことが多いそうです。

では次。
i[0] = 'H';
i[1] = 'e';
i[2] = 'l';
i[3] = 'l';
i[4] = 'o';

ここで"Hello"という文字列を設定しているわけです
文字列とは文字の配列でしたね!
よって文字型の値をひとつずつ入れることで文字列を作っています。
文字をあつかっているので ' ' でくくっています。
文字列をくくるときの" " と間違えないように注意が必要デスネ!


そして
i[5] = '\0';
ここで代入している \0 とは何なのでしょうか
これは「ヌル文字」というそうです。
ヌル文字・・・?
それはここで文字列がおわりますよ!!!という記号のようなもの。 だそうです
文字列の最後には「ヌル文字」を入れる。これがC言語のルールだそうです。

C言語では何も代入していない変数には何が入っているかわからないそうです
なのでもしかしたらi[6]には'y'という文字がはいっちゃってたりするかもしれないのです。
そうなると表示する文字列は「Helloy」となってしまいます。
もちろんひとつだけとはかぎりませんよね?
その後ろにもいろいろな値が入っているでしょうから \0 を代入しないとわけのわからない文字列が表示されたりしてしまうことになるのです。
それでは困り果ててしまいますので「ここで文字列の表示をとめる」ということをプログラムに対してしっかり教える必要があるというわけですね。

文字列の最後には「ヌル文字」を入れる。
これはC言語で文字列を扱う上で基本中の基本。絶対忘れてはいけない重要なポイントだそうです。

わかっているとは思いますが。
\0 の \は ¥と表記しています


よーし。明日からも
がんばるぞー('A`)おー。

ポインタの続き~

昨日の続きですね~

ではさらに下を見ていきましょう
printf("iの値は?;%d\n", i);
iという変数の内容を画面に表示させる。というプログラムですね。
iには10という値を代入していたのでここでは「iの値は?:10」と表示されます。
では次の行はどうでしょうか?
printf("pの値は?;%d\n", *p);
ポインタ変数がつかわれていますね!
このpという変数に何をいれていたか思い出してください。
ヒント)p = &i;
そうです、iという変数の場所(つまりアドレス)をいれていましたよね?
でもここで使われているpには*がついていますねぇ。
このようにポインタ変数の前に*をつけるのはその中身を見るためのルールだそうです。
・・・・なんか自分で説明しててもわかりにくいなぁ。。
もっとわかりやすい・・・・方法はないかしら・・

例えば
int i = 10
int *p;

p = &i;

ここまで。
ここまでの考え方を。int型の箱にiが入っててそこに10が代入されてる。
じゃなくて。
intっていう大きさのiっていう家がありました。そこにはiさんが住んでいてその家には茶菓子が10個ありました。(なんじゃそりゃ。
んで2行目
int型のポインタ変数pを。intっていう大きさの訪問販売者(ポインタ変数pさん)がいましたよっと
ヨシこれでいこう。
そして3行目
ここでpにiの場所を教えてる。ですから
ポインタ変数pさんはiさんの住所を調べて玄関先まで行きました(訪問販売者デスカラ

そしてわかりにくかった
printf("pの値は?;%d\n", *p);
ポインタ変数の前に*をつけるとその中身が見れる。

ふむ。。?
つまり
訪問販売者のポインタ変数pさんは*(インターホンをならして)をつけてiさんの家に上がりこむことに成功したというわけですね!!さすがやり手!!(ナンダヨ

*は中身を見るときにはつけなければいけないルールとなっています。インターホンをおして中にはいる~といったイメージと結び付けておくと忘れないかもしれませんね!


と、イメージがかたまったところで先ほどの続きにいきましょうか!!
printf("pの値は?;%d\n", *p);
この結果から。
pさんはiさん宅にはいれたのでiさんちにおいてある茶菓子の数がわかっちゃうわけですね^^
つまり*pとかくことで「i」と書いたのと同じ意味になるというわけです
ということで*pの値は?:10と表示されます。
iという変数と:pという変数はおたがい独立した別の変数なのに「実態は同じもの」というわけです
参考文献には「これはWindowsのショートカットににている」と解説されていました
Windowsではファイルのショートカットを作る機能がありますよね?あれってショートカットを作成すると元のとは別にアイコンができるじゃないですか。でもその別のアイコンをクリックすると元のファイルが開きますよね?それと同じ意味を持つのがポインタ変数だとかいてありました

まぁ。。私の茶菓子話のほうがわかりやすいとおもいますけd  ゴホゴホ


さぁ~気を取り直して続きいきますよ~
*p -= 3
ここで行っているのは変数iと*pが同じ実態をもっているんだよ!ということの証明となるプログラムですね。
printf("iの値は?;%d\n", i);
printf("pの値は?;%d\n", *p);

実際には*pから3を引いていますのでもちろん*pの値は7になりますよね?
ではiはどうでしょうか?
iも7になります
ポインタ変数pがiの「場所を格納」しているので*pの内容を書き換えるとiそのものの値を書き換えることになるのです。
私のたとえ話でわかりやすくいうのであれば
ポインタ変数pさんは*でインターホンを押してiさん宅に入り茶菓子を3個もらって食べてしまったのでiさん宅の茶菓子は7こに変更されてしまったわけですね。
うーん。難しいんだろうけど意外とわかったかも?
明日も続きから!
がんばるぞー('A`)おー。
プロフィール

しー

Author:しー
*使用ソフト*
メタセコ
Blender
modo

カレンダー
08 | 2017/09 | 10
- - - - - 1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
WEB拍手
カテゴリ
最新コメント
検索フォーム
リンク
ブロとも申請フォーム

この人とブロともになる

いらっしゃいませ
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。