プログラミング初心者です。
よろしくお願いします。
◎1------------------------------------
#include<stdio.h>
int main(void)
{
int i,dt[3];
for(i=0;i<3;++i){
printf("dt[0]=%d\n",dt[0]);
printf("dt[1]=%d\n",dt[1]);
printf("dt[3]=%d\n",dt[3]);
scanf("%d",&dt[i]);
printf("i=%d\n",i);
puts("");
if(dt[i]==0){
break;
}
}
printf("dt[0]=%d\n",dt[0]);
printf("dt[1]=%d\n",dt[1]);
printf("dt[2]=%d\n",dt[2]);
printf("dt[3]=%d\n",dt[3]);
printf("i=%d\n",i);
puts("");
i=1;
while(1){
printf("%d ",i);
if(1000<i){
break;
}
i*=2;
}
puts("");
return 0;
}
----------------------------------------
◎2------------------------------------
#include<stdio.h>
int main(void)
{
int i,dt[2];
for(i=0;i<3;++i){
printf("dt[0]=%d\n",dt[0]);
printf("dt[1]=%d\n",dt[1]);
printf("dt[2]=%d\n",dt[2]);
scanf("%d",&dt[i]);
printf("i=%d\n",i);
puts("");
if(dt[i]==0){
break;
}
}
printf("dt[0]=%d\n",dt[0]);
printf("dt[1]=%d\n",dt[1]);
printf("dt[2]=%d\n",dt[2]);
printf("i=%d\n",i);
puts("");
i=1;
while(1){
printf("%d ",i);
if(1000<i){
break;
}
i*=2;
}
puts("");
return 0;
}
----------------------------------------
以上2つのプログラムについて疑問があります。
まず◎1については、あえて添え字のdt[3]の値を見てみようと思ったら、iの値が入っているとわかりました。
しかし、何故添え字の番号の配列にiの値が入っているのかがわかりません。
次に◎2ですが、3回目のループで、添え字の番号の配列自身に入力した数値を格納すると、iと添え字番号配列に入力した数値が入っていました。
何故このようになっているのか疑問です。
以上のような疑問があります。
添え字の番号の配列とiが何か関連があるようですがいまいちわかりません。
教えていただけると嬉しいです。
No.2ベストアンサー
- 回答日時:
そのコンパイラがiとdt[ ]を連続して確保しているためでしょう
たまたまdt[3]に当たる位置に変数iがあったというだけと思われます
環境が違えば別の結果になるでしょうし
配列の要素をオーバーして書き換えて別の変数を壊すバグもあります
変数の宣言を
int i,dummy1,dummy2,dummy3,dt[3];
に変えたら結果も変わりませんか
ご回答ありがとうございます。
>そのコンパイラがiとdt[ ]を連続して確保しているためでしょう
>たまたまdt[3]に当たる位置に変数iがあったというだけと思われます
以上の内容しっかり理解しておきます。
int i,dummy1,dummy2,dummy3,dt[3];とするとdt[3]の値は、何も数値が設定されてない時の値が表示されていました!
No.4
- 回答日時:
>◎2------------------------------------
>int i,dt[2];
dt[0]とdt[1]が有効であって、dt[2]は配列の定義範囲外の領域であることはおわかりですね。
また、お使いの環境では、おそらくdt[](dt[0], dt[1])の後ろにiの領域があるのでしょう。
このとき、dt[2]という定義範囲外の領域ににアクセスするということは、
iにアクセスすることと同じです。
>添え字の番号の配列とiが何か関連があるようです
何も関係ありません。
No.3
- 回答日時:
>次に◎2ですが、3回目のループで、添え字の番号の配列自身に入力した数値を格納すると、iと添え字番号配列に入力した数値が入っていました。
どこの話をされているのか、よくわかりません。
入力例と出力例を示してください。
説明不足ですいません。
--------------------------------------
dt[0]=-858993460
dt[1]=-858993460
dt[2]=0
10 ←入力値
i=0
dt[0]=10
dt[1]=-858993460
dt[2]=1
20 ←入力値
i=1
dt[0]=10
dt[1]=20
dt[2]=2
30 ←入力値
i=30
dt[0]=10
dt[1]=20
dt[2]=30
i=30
1 2 4 8 16 32 64 128 256 512 1024
--------------------------------------
3回目の入力で、30と入力するとiは30となり
dt[2]も30となっていました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# win10で、正確な待ち時間の作り方 6 2023/02/14 18:28
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# クラスのメンバ変数を基準に並べ替えをしたい 5 2022/12/25 17:40
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- C言語・C++・C# 大量のデータを読み込んで表示する速度を改善したい 8 2023/05/07 13:29
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
- C言語・C++・C# c言語配列の結合についてです。 なぜうまくいかないのでしょうか。 #include <stdio.h 4 2022/05/30 22:42
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
既約分数の表示プログラム
-
10個出力で改行したいのですが...
-
printf で二進表示を行いたい。
-
Cのdoubleの浮動小数点表示につ...
-
万年カレンダーのC言語プログラ...
-
ホームページをC言語で作りたい...
-
(C言語)西暦年月日を入力して...
-
コマンドラインに出力した文字...
-
質問ですが
-
4の倍数を論理演算で表す。。
-
printfの出力内の文字をdefine...
-
C言語 プログラミング
-
strcmp
-
C言語での、年複利の計算方法...
-
コンパイルエラーについて
-
アドレスの比較について
-
入力したお金の金額からお札の...
-
3つの整数を画面から入力して...
-
C言語について
-
プログラミング言語C
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語について
-
printf で二進表示を行いたい。
-
cshの文字列操作(0埋め)
-
10個出力で改行したいのですが...
-
コンパイルエラーについて
-
テキストカーソル位置の取得
-
strcmp
-
unsigned int型について
-
c言語でAからZまでを表示する...
-
printf( " %2d", p * q );
-
コマンドラインに出力した文字...
-
printfの出力内の文字をdefine...
-
ホームページをC言語で作りたい...
-
コマンドプロンプトがすぐ消える
-
小数点切捨て表示
-
【C言語教えてください】sin波...
-
switch分のケースを範囲数?に...
-
二つの整数値の大小比較
-
4の倍数を論理演算で表す。。
-
defineで定数が置き換えられな...
おすすめ情報