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

回答編集履歴

1

追記

2021/02/14 16:53

投稿

kazuma-s
kazuma-s

スコア8222

answer CHANGED
@@ -30,4 +30,38 @@
30
30
  &str[i] がアドレスですから、
31
31
  「&str[i]自体のアドレス」とは「str[i] のアドレス自体のアドレス」となって変です。
32
32
 
33
- 理解できますか?
33
+ 理解できますか?
34
+
35
+ **追記**
36
+ > &str[i]はポインタstr[i]の指すメモリに入る数値、str[i]はメモリに入る数値だと理解できています。
37
+
38
+ char str[4] = "abc"; と宣言されていたとすると、
39
+ str[i] は、配列 str の i番目の要素で、型は char。
40
+
41
+ ここで、str[0] = 'e'; と書くことができます。
42
+ carnage0216さんの理解しているように str[i] が数値なら、
43
+ 'a' = 'e' となりますよね。
44
+ しかし、値に値は代入できません。
45
+ str[i] は値ではないのです。
46
+ str[i] は変数と同じものなのです。
47
+ 変数には値を代入できます。
48
+
49
+ 変数は、次の 2 つの性質があります。
50
+ 1. 値を持つ。
51
+ 2. 値を変更できる。
52
+ str[i] は変数(と同じもの)なのです。
53
+ carnage0216さんは、1 の性質しか理解していなくて、
54
+ str[i] を数値だと言っているのです。
55
+ それは間違いです。
56
+
57
+
58
+ > &str[i]はポインタstr[i]の指すメモリに入る数値、
59
+
60
+ 「ポインタstr[i]」が間違い。
61
+ str[i] はポインタではありません。char型の変数です。
62
+ 変数ですから、メモリ中にあり、アドレスが決まっています。
63
+ &str[i] は、変数str[i] のアドレスです。
64
+ アドレスだから、値です。
65
+ 数値と言ってもいいかもしれませんが、
66
+ int や double とは違いますから、単に「値」と言いましょう。
67
+ とにかく、&str[i] は、「変数str[i] のアドレス」だと理解しましょう。