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

回答編集履歴

4

しっくり来なかったので再度修正

2021/02/15 07:57

投稿

kaina
kaina

スコア418

answer CHANGED
@@ -5,10 +5,10 @@
5
5
  fanaさんの指摘を受け、修正
6
6
 
7
7
  str[i]    →str配列のi番目の要素の値
8
- *(str + i)  →str配列の先頭アドレスにiを加算したアドレスの中身の値
8
+ *(str + i)  →str配列の先頭アドレスにiを加算したアドレスの中身の値
9
- &str[i]    →str配列のi番のアドレス
9
+ &str[i]    →str配列のi番のアドレス
10
- str + i    →str配列の先頭アドレスにiを加算したアドレス
10
+ str + i    →str配列の先頭アドレスにiを加算したアドレス
11
- &*(str + i)  →str配列の先頭アドレスにiを加算したアドレスの中身の値のアドレス
11
+ &*(str + i)  →str配列の先頭アドレスにiを加算したアドレスの中身の値のアドレス
12
12
 
13
13
  サンプルも併せて記載
14
14
  ```C

3

謎の変数*pを削除

2021/02/15 07:57

投稿

kaina
kaina

スコア418

answer CHANGED
@@ -16,7 +16,6 @@
16
16
  int main(void){
17
17
  // Your code here!
18
18
  char str[5]={"abcde"};
19
- char* p;
20
19
  int i;
21
20
  for(i = 0; i < 5; i++){
22
21
  printf("%c\n", str[i]);

2

サンプルプログラムの出力が間違っていたので修正

2021/02/15 07:47

投稿

kaina
kaina

スコア418

answer CHANGED
@@ -21,36 +21,36 @@
21
21
  for(i = 0; i < 5; i++){
22
22
  printf("%c\n", str[i]);
23
23
  printf("%c\n", *(str + i));
24
- printf("0x%x\n", &str[i]);
24
+ printf("0p%x\n", &str[i]);
25
- printf("0x%x\n", str + i);
25
+ printf("0p%x\n", str + i);
26
- printf("0x%x\n", &*(str + i));
26
+ printf("0p%x\n", &*(str + i));
27
27
  }
28
28
  }
29
29
 
30
30
  出力結果
31
31
  a
32
32
  a
33
- 0xc93a0c0
33
+ 0x7ffc155edf10
34
- 0xc93a0c0
34
+ 0x7ffc155edf10
35
- 0xc93a0c0
35
+ 0x7ffc155edf10
36
36
  b
37
37
  b
38
- 0xc93a0c1
38
+ 0x7ffc155edf11
39
- 0xc93a0c1
39
+ 0x7ffc155edf11
40
- 0xc93a0c1
40
+ 0x7ffc155edf11
41
41
  c
42
42
  c
43
- 0xc93a0c2
43
+ 0x7ffc155edf12
44
- 0xc93a0c2
44
+ 0x7ffc155edf12
45
- 0xc93a0c2
45
+ 0x7ffc155edf12
46
46
  d
47
47
  d
48
- 0xc93a0c3
48
+ 0x7ffc155edf13
49
- 0xc93a0c3
49
+ 0x7ffc155edf13
50
- 0xc93a0c3
50
+ 0x7ffc155edf13
51
51
  e
52
52
  e
53
- 0xc93a0c4
53
+ 0x7ffc155edf14
54
- 0xc93a0c4
54
+ 0x7ffc155edf14
55
- 0xc93a0c4
55
+ 0x7ffc155edf14
56
56
  ```

1

指摘を受け修正

2021/02/15 07:46

投稿

kaina
kaina

スコア418

answer CHANGED
@@ -2,9 +2,55 @@
2
2
  YES
3
3
 
4
4
  それぞれを日本語で説明するとこんな感じ。
5
+ fanaさんの指摘を受け、修正
5
6
 
6
7
  str[i]    →str配列のi番目の要素の値
7
- *(str + i)  →str配列の先頭アドレスにiを加算したアドレスの値
8
+ *(str + i)  →str配列の先頭アドレスにiを加算したアドレス中身の
8
- &str[i]    →str配列のi番目のアドレス
9
+ &str[i]    →str配列のi番目のアドレス
9
- str + i    →str配列の先頭アドレスにiを加算したアドレス
10
+ str + i    →str配列の先頭アドレスにiを加算したアドレス
10
- &*(str + i)  →str配列の先頭アドレスにiを加算したアドレスの値のアドレス
11
+ &*(str + i)  →str配列の先頭アドレスにiを加算したアドレス中身の値のアドレス
12
+
13
+ サンプルも併せて記載
14
+ ```C
15
+ #include <stdio.h>
16
+ int main(void){
17
+ // Your code here!
18
+ char str[5]={"abcde"};
19
+ char* p;
20
+ int i;
21
+ for(i = 0; i < 5; i++){
22
+ printf("%c\n", str[i]);
23
+ printf("%c\n", *(str + i));
24
+ printf("0x%x\n", &str[i]);
25
+ printf("0x%x\n", str + i);
26
+ printf("0x%x\n", &*(str + i));
27
+ }
28
+ }
29
+
30
+ 出力結果
31
+ a
32
+ a
33
+ 0xc93a0c0
34
+ 0xc93a0c0
35
+ 0xc93a0c0
36
+ b
37
+ b
38
+ 0xc93a0c1
39
+ 0xc93a0c1
40
+ 0xc93a0c1
41
+ c
42
+ c
43
+ 0xc93a0c2
44
+ 0xc93a0c2
45
+ 0xc93a0c2
46
+ d
47
+ d
48
+ 0xc93a0c3
49
+ 0xc93a0c3
50
+ 0xc93a0c3
51
+ e
52
+ e
53
+ 0xc93a0c4
54
+ 0xc93a0c4
55
+ 0xc93a0c4
56
+ ```