- ベストアンサー
C言語で宣言した変数に何も代入しなかった場合の処理方法
- C言語でint型の変数aを宣言し、何も代入しなかった場合、aの中身は空っぽになります。
- 変数aの中身が空っぽかどうかを調べるには、if文を使用してaの値が0かどうかを判定します。
- 具体的には、if (a == 0)と書くことでaの値が0であればtrueとなり、何も代入されていないことを判定することができます。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
C言語において空っぽの値というものはありません。 (C++なら別ですが) C言語で変数を宣言した場合、その変数の型に必要な分だけの メモリが確保され、変数に割り当てられます。 (例:int型なら4バイト、double型なら8バイト) そして、確保したメモリにもともと何が入っていても特に処理をしません。 言い換えると他のプログラムなどが使っていたデータ等、予想できないものが 変数に入ることになります。 したがって、int a;と宣言しただけのaの中身はプログラムを実行するたびに変わるため 意味のないものとなります。 もし、「aに値が代入されていなければエラー」のような処理をしたいのであれば int a = INT_MAX; // INT_MAXは最近のプログラムなら2147483647 ・ ・ ・ if(a == INT_MAX) { (void)printf("Error.\n"); exit(EXIT_FAILURE); } printf("a = %d\n", a); のようにaにはまず入らないであろう値を予め代入しておくのが良いと思います。
その他の回答 (4)
- Tacosan
- ベストアンサー率23% (3656/15482)
うぅ~ん, そもそもだけど「なんでそんなことをしたいのか」が分からん. まあ, 「方法」もないんだけど.
- chie65536(@chie65535)
- ベストアンサー率44% (8740/19838)
>この if の■■に書くべきことを教えてください。 書くべき事はありません。 通常「未初期化の変数を参照する行為」は許されません。 コンパイラによっては「未初期化の変数を参照している」として、コンパイル時にワーニング(警告)が出ます。 つまり「そんな事は出来ない」し「やっちゃいけない」のです。 因みに、未初期化の変数を参照した場合、値は不定です。
- m0r1_2006
- ベストアンサー率36% (169/464)
空っぽではなく, int 分のメモリを消費しています. a にはなんか,値が入っています. 普通は,a のために確保したメモリに元から入っていたバイナリを int に変換した値が入ります. 一部のコンパイラでは,0 に初期化する場合もあります. よってこれでは無理.
お礼
なるほど、宣言しただけの段階ではメモリに以前はいっていたものがそのままのこる場合があり、そのための初期化というものがあるのですね 大変勉強になりました。 ありがとうございます。
- suzukikun
- ベストアンサー率28% (372/1325)
Cは変数宣言しただけのときの中身を保証していません。 なので中身を入れてないものを参照するとコンパイラによってはウォーニングが出ると思いますし、実行しても正しく実行されません。 どこかで、プログラマが、その値が入らないような値を先に入れておくことが必要です。 ただ、コンパイラによってはNULLが入っているものもあるようです。
お礼
なるほど、勉強になりました。 また別の方法を考えてみようと思います。 ありがとうございました。
お礼
なるほど、宣言しただけの段階ではメモリに以前はいっていたものがそのままのこる場合があり、そのための初期化というものがあるのですね 大変勉強になりました。 ありがとうございます。