C言語で初期化せずにint型とfloat型の変数へアクセスするとどうなるか
問題
C言語において、int型とfloat型の変数を初期化せずに宣言し、その値を表示しようとすると何が起こるかを解説します。
解説
変数を宣言しただけで初期化していない場合、その変数の値を表示しようとすると、0または不定値(ガーベジ値)が出力されます。
変数を宣言すると、その変数用にメモリ上の領域が割り当てられます。初期化とは、宣言時にすでに確保されたメモリ領域へ値を書き込む操作のことです。
しかし、以下のプログラムでは、確保されたメモリ領域に値を書き込んでいません。そのため、領域には以前の処理で使われていた値がそのまま残っています。これを表示すると、0または不定値が出力されるのです。
なお、C言語ではローカル変数は自動的には初期化されません。初期化されていない変数を読み出す動作は未定義動作とされ、実行するたびに異なる結果になる可能性があります。そのため、実用的なプログラムでは、変数を必ず初期化してから使用することが推奨されます。
サンプルプログラム
以下は、初期化していないint型とfloat型の変数にアクセスするCプログラムです。
#include<stdio.h>
int main(){
float a,b,c;
int x,y,z;
printf("value of a:%f\n",a);
printf("value of b:%f\n",b);
printf("value of c:%f\n",c);
printf("value of x:%d\n",x);
printf("value of y:%d\n",y);
printf("value of z:%d",z);
return 0;
}実行結果
上記のプログラムを実行すると、以下のような結果が出力されます。
value of a:0.000000 value of b:0.000000 value of c:0.000000 value of x:1512368 value of y:0 value of z:27
このように、float型の変数には0.000000が表示され、int型の変数には0や1512368、27といった意味のない数値が表示されています。これらはメモリ領域に残っていた値であり、プログラムの実行環境やタイミングによって結果が変わる可能性がある点に注意してください。
-
C++の変数入門:型の種類とスコープ(ローカル変数・グローバル変数)の基礎
C++における変数と型 C++では、すべての変数が特定の「型」を持っています。この型によって、次の3つの要素が決まります。 変数が占めるメモリのサイズとレイアウト そのメモリに格納できる値の範囲 変数に対して適用できる演算・操作の種類 変数の宣言は、次の書式で行います。 type variableName; 指定できる型には、int・bool・float・char などの基本データ型(プリミティブ型)のほか、列挙型、他の型へのポインタ、さらに構造体やクラスで定義されたより複雑な型があります。 変数のスコープとは スコープ(scope)とは、プログラムの中で変数が有効となる領域のことです。
-
Pythonでリストのインデックスと値を取得する3つの方法(index・range・enumerate)
Pythonでリストを扱っていると、特定の位置にある要素へアクセスしたり、逆に要素からインデックスを取得したりする場面が頻繁に発生します。この記事では、リスト内の要素のインデックスや値を取得するための代表的な3つの方法を、サンプルコード付きでわかりやすく解説します。 方法1:list.index() を使う index() メソッドは、指定した要素がリストのどの位置に存在するかを調べたいときに便利です。引数に要素の値を渡すと、その要素のインデックス位置(先頭は0)が返されます。 サンプルコード listA = [11, 45, 27, 8, 43] # 45 のインデックスを表示 prin