teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

3

コメントに基づき一部修正

2019/12/19 01:37

投稿

rubato6809
rubato6809

スコア1382

answer CHANGED
@@ -33,4 +33,4 @@
33
33
 
34
34
  > 値が[-52'フ']に変更されます
35
35
 
36
- 質問者のコードは内側の i を定義しただけで値をセットしていません。**不定値**です。値が無いのではありませんよ、値が不定なだけ。だってメモリには何かの値があるのだから。割り当てられたメモリに残っていた値が表示されのです。~~私的には不思議な表示ですが、文字化けのようなものかな。~~残っていた値は -52 = 0xCC である、これは半角カタカナの「フ」かもね、と表示したんだな。了解
36
+ 質問者のコードは内側の i を定義しただけで値をセットしていません。**不定値**です。値が無いのではありませんよ、値が不定なだけ。だってメモリには何かの値があるのだから。普通、割り当てられたメモリに残っていた値が表示されだけど、この場合はデバッガがセットした値だそうです、コメントをお読みください。~~私的には不思議な表示ですが、文字化けのようなものかな。残っていた値は~~ -52 = 0xCC である、これは半角カタカナの「フ」かもね、と表示したんだな。0xCC が int3(デバッグ割り込み)ということは、プログラムのバグで、ここを「実行」しちゃったらただちにデバッガに捉えられるという仕掛けなんですね

2

訂正追加

2019/12/19 01:37

投稿

rubato6809
rubato6809

スコア1382

answer CHANGED
@@ -1,4 +1,4 @@
1
- はっきり言いましょう。
1
+ 良い質問です。はっきり言いましょう。
2
2
  int i; と char i; は、**同名「i」だけど、別の変数だから**。もちろん割り当てられるメモリも違う。
3
3
  証拠をお見せしましょう。i のメモリアドレスと値を表示させます。
4
4
  ```C
@@ -22,7 +22,7 @@
22
22
  0x7ffcae6277c7: 65 inner i
23
23
  0x7ffcae6277c8: 0 outer i
24
24
  ```
25
- ほらね、アドレスが違う。コードブロックの内側で 65 を代入したのに、外側が0のままなのは、別の変数だから。
25
+ ほらね、アドレスが違う。コードブロックの内側で 'A' を代入したのに、外側が0のままなのは、別の変数だから。
26
26
 
27
27
  内側の ``` char str[] = "sss", i; ``` は変数定義です。文法的に言うと実行文ではありません。これも注意が必要。で、この変数定義は2行に書くことができて、こう書くのと同じです。
28
28
  ```C
@@ -33,4 +33,4 @@
33
33
 
34
34
  > 値が[-52'フ']に変更されます
35
35
 
36
- 質問者のコードは内側の i を定義しただけで値をセットしていません。**不定値**です。値が無いのではありませんよ、値が不定なだけ。だってメモリには何かの値があるのだから。割り当てられたメモリに残っていた値が表示されたのです。私的には不思議な表示ですが、文字化けのようなものかな。
36
+ 質問者のコードは内側の i を定義しただけで値をセットしていません。**不定値**です。値が無いのではありませんよ、値が不定なだけ。だってメモリには何かの値があるのだから。割り当てられたメモリに残っていた値が表示されたのです。~~私的には不思議な表示ですが、文字化けのようなものかな。~~残っていた値は -52 = 0xCC である、これは半角カタカナの「フ」かもね、と表示したんだな。了解。

1

語尾修正

2019/12/19 00:17

投稿

rubato6809
rubato6809

スコア1382

answer CHANGED
@@ -33,4 +33,4 @@
33
33
 
34
34
  > 値が[-52'フ']に変更されます
35
35
 
36
- 質問者のコードは内側の i を定義しただけで値をセットしていません。**不定値**です。値が無いのではありませんよ、値が不定なだけ。だってメモリには何かの値があるのだから。割り当てられたメモリに残っていた値が表示されたのでしょう。私的には不思議な表示ですが、文字化けのようなものかな。
36
+ 質問者のコードは内側の i を定義しただけで値をセットしていません。**不定値**です。値が無いのではありませんよ、値が不定なだけ。だってメモリには何かの値があるのだから。割り当てられたメモリに残っていた値が表示されたので。私的には不思議な表示ですが、文字化けのようなものかな。