fc2ブログ

新たな疑問~C言語編~

いや~とにかく覚えんのでつかれたぁ~

というわけで・・・





復活!(はやっ!?)




とりあえずグローバル変数とローカル変数っていうの覚えました
あれですグローバルIPとローカルIPみたいなやつ
ぶち抜いて説明すると

グローバル=外 
ローカル=内
ということです(正確には{}内または関数内)

なんでもローカル関数の中の変数はローカルの中でしか使えないんだって~

そんでひとつ疑問に思いました

ソース公開の前に簡単コラム
C言語の関数=ソース?とはこんなカタチでできています

型名 関数名(引数){処理}

といっても難しく考える必要ありません
別にこれは計算でもなんでもないんですから
主に変更を加えるのは処理です

んでもって関数は 
HSPでいうステートメントみたいなものです

以下C言語のソース


/*コメントCのソースだよ食べ物じゃないよ
(ちなみにここはコンパイラ(機械語翻訳ソフト)に認識されない)*/
#include

int main(void)
{
int value1 = 10;
int value2 = 20;
printf("1:value1 %d\n",value1);
printf("1:value2 %d\n",value2);
{
int value1;
value1 = 30;
value2 = 40;
printf("2:value1 %d\n",value1);
printf("2:value2 %d\n",value2);
}
printf("3:value1 %d\n",value1);
printf("3:value2 %d\n",value2);
fflush(stdin);
getchar();
return 0;
}

~実行結果~
1:value1 10
1:value2 20
2:value1 30
2:value2 40
3:value1 10
3:value2 40



となったわけさ
そこでちょいと疑問に思ったんだけど
ローカル内っていうのはブロック{}内のことでもあるんだけど
最後の3valueの1と2で

説明ではローカルの寿命は関数内ということは
3valueの1は10っていうのは納得できるんだけど?
3valueの2が40ってどゆことよ?

自分なりに憶測を立ててみたんだけど
3valueの1が10になったのは2番目ブロック内のint型でvalue1だけを宣言
されたからじゃないかな~と思いついたわけ


それで2番目のブロック内のint型にはvalue2は宣言されていなかったと・・・
それで思いついたのさ

”寿命が尽きたのは変数が宣言された部分だけではないのか?”と・・・

つまりブロック内の関数はすべて寿命が尽きるのではなく
”{}ブロック内で宣言されたものは新規なものである”ということなんじゃないのかな?と・・・

ソシテ簡潔に説明するなら{}内で宣言されたvalue1は最初に宣言されたvalue1とは
まったく別の変数であるということに気づいた(つまり新規の変数)

もうひとつは2番目のブロックでvalue2が最後まで生きたのは
新しくなった”のではなく”変更された”ということのようだ



ふふふっふふふふあはははははは!!!←すぐ調子に乗るやつ


まぁそんなこんなで今日もやっています

ぶっちゃけここで学習したこと書くと復習にもなるんでブログでも書いてます



あーそういや管理人の目標伝えていませんでしたね
とりあえずの目標はズバリ!!



管理人が作ったショートカッター(HSP作)のベクターで配布している
Windows上のプログラムを楽々起動させれる
(そこっ!ショートカット使えばいいとかいわない!)
ベクター配布プログラム

とりあえずの目標がベクターで配布しているショートカッターを


プログラムをC言語で作る!!!

&機能の拡張が目標です!!!


つってもまだウィンドウを確保することすらできませんw
完成はまだまだず~~~~~~っと先になりそうです
一応関数関連の式の代入やら数値の扱いややらはあのときより高いんだけどな~・・・


ちなみにこのショボプログラムは先月9人もの方がダウンロードしました
こんなショボいのダウンロードしてくれてありがとう!!!
ちなみに要領は(84KB)です~宣伝中~wwww

ベクターのほうにもサンクス


というわけでまぁいろいろいったけど
今もプログラムをしてるっつーわけですよ


あと上のはあくまで憶測なので追記したい人はコメントからどうぞ

それでは!!



コメント

C言語は難しそうですね

私は今はJavaを勉強していますが
将来はCとかC++なんかも
覚えたいですね。
ブログ頑張って下さい。
ちなみにあし@という足跡サイトを
使えば色々な方から自分のブログを
見てもらえますよ!

お~サンクス

JAVAをやっているんですか?
最初のほう自分もどっちやろうか
悩みました・・・
悩んだ果てに性能重視の
C言語に決めました
ちなみにCとC++とJAVAのいいほうを
引き継いだD言語というのもあるので
Cを極めたら少し覚えたいな~
と思っていますよ^^

後情報サンクスです
でもなんかクッキー残しまくりそうで怖いですね
ちょいと検討させてもらいます

No title

おさらい
・value1という名前のグローバル変数とローカル変数が2つ存在してます。
・value2は、3つともグローバル変数として機能してるようです。1度目に20を代入して、二度目に40を上書きされた・・・という感じ。

コメントサンクス

takeさんプログラム取得への協力
ありがとうございました

なおコメントの件につきましては
メールで送信しましたので
一読していただければ幸いです
コメントの投稿
管理者にだけ表示を許可する

トラックバックURL