回答編集履歴

4

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

2021/02/15 07:57

投稿

kaina
kaina

スコア418

test CHANGED
@@ -12,13 +12,13 @@
12
12
 
13
13
  str[i]    →str配列のi番目の要素の値
14
14
 
15
- *(str + i)  →str配列の先頭アドレスにiを加算したアドレスの中身の値
15
+ *(str + i)  →str配列の先頭アドレスにiを加算したアドレスの中身の値
16
16
 
17
- &str[i]    →str配列のi番のアドレス
17
+ &str[i]    →str配列のi番のアドレス
18
18
 
19
- str + i    →str配列の先頭アドレスにiを加算したアドレス
19
+ str + i    →str配列の先頭アドレスにiを加算したアドレス
20
20
 
21
- &*(str + i)  →str配列の先頭アドレスにiを加算したアドレスの中身の値のアドレス
21
+ &*(str + i)  →str配列の先頭アドレスにiを加算したアドレスの中身の値のアドレス
22
22
 
23
23
 
24
24
 

3

謎の変数*pを削除

2021/02/15 07:57

投稿

kaina
kaina

スコア418

test CHANGED
@@ -33,8 +33,6 @@
33
33
  // Your code here!
34
34
 
35
35
  char str[5]={"abcde"};
36
-
37
- char* p;
38
36
 
39
37
  int i;
40
38
 

2

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

2021/02/15 07:47

投稿

kaina
kaina

スコア418

test CHANGED
@@ -44,11 +44,11 @@
44
44
 
45
45
  printf("%c\n", *(str + i));
46
46
 
47
- printf("0x%x\n", &str[i]);
47
+ printf("0p%x\n", &str[i]);
48
48
 
49
- printf("0x%x\n", str + i);
49
+ printf("0p%x\n", str + i);
50
50
 
51
- printf("0x%x\n", &*(str + i));
51
+ printf("0p%x\n", &*(str + i));
52
52
 
53
53
  }
54
54
 
@@ -62,50 +62,50 @@
62
62
 
63
63
  a
64
64
 
65
- 0xc93a0c0
65
+ 0x7ffc155edf10
66
66
 
67
- 0xc93a0c0
67
+ 0x7ffc155edf10
68
68
 
69
- 0xc93a0c0
69
+ 0x7ffc155edf10
70
70
 
71
71
  b
72
72
 
73
73
  b
74
74
 
75
- 0xc93a0c1
75
+ 0x7ffc155edf11
76
76
 
77
- 0xc93a0c1
77
+ 0x7ffc155edf11
78
78
 
79
- 0xc93a0c1
79
+ 0x7ffc155edf11
80
80
 
81
81
  c
82
82
 
83
83
  c
84
84
 
85
- 0xc93a0c2
85
+ 0x7ffc155edf12
86
86
 
87
- 0xc93a0c2
87
+ 0x7ffc155edf12
88
88
 
89
- 0xc93a0c2
89
+ 0x7ffc155edf12
90
90
 
91
91
  d
92
92
 
93
93
  d
94
94
 
95
- 0xc93a0c3
95
+ 0x7ffc155edf13
96
96
 
97
- 0xc93a0c3
97
+ 0x7ffc155edf13
98
98
 
99
- 0xc93a0c3
99
+ 0x7ffc155edf13
100
100
 
101
101
  e
102
102
 
103
103
  e
104
104
 
105
- 0xc93a0c4
105
+ 0x7ffc155edf14
106
106
 
107
- 0xc93a0c4
107
+ 0x7ffc155edf14
108
108
 
109
- 0xc93a0c4
109
+ 0x7ffc155edf14
110
110
 
111
111
  ```

1

指摘を受け修正

2021/02/15 07:46

投稿

kaina
kaina

スコア418

test CHANGED
@@ -6,14 +6,106 @@
6
6
 
7
7
  それぞれを日本語で説明するとこんな感じ。
8
8
 
9
+ fanaさんの指摘を受け、修正
10
+
9
11
 
10
12
 
11
13
  str[i]    →str配列のi番目の要素の値
12
14
 
13
- *(str + i)  →str配列の先頭アドレスにiを加算したアドレスの値
15
+ *(str + i)  →str配列の先頭アドレスにiを加算したアドレス中身の
14
16
 
15
- &str[i]    →str配列のi番目のアドレス
17
+ &str[i]    →str配列のi番目のアドレス
16
18
 
17
- str + i    →str配列の先頭アドレスにiを加算したアドレス
19
+ str + i    →str配列の先頭アドレスにiを加算したアドレス
18
20
 
19
- &*(str + i)  →str配列の先頭アドレスにiを加算したアドレスの値のアドレス
21
+ &*(str + i)  →str配列の先頭アドレスにiを加算したアドレス中身の値のアドレス
22
+
23
+
24
+
25
+ サンプルも併せて記載
26
+
27
+ ```C
28
+
29
+ #include <stdio.h>
30
+
31
+ int main(void){
32
+
33
+ // Your code here!
34
+
35
+ char str[5]={"abcde"};
36
+
37
+ char* p;
38
+
39
+ int i;
40
+
41
+ for(i = 0; i < 5; i++){
42
+
43
+ printf("%c\n", str[i]);
44
+
45
+ printf("%c\n", *(str + i));
46
+
47
+ printf("0x%x\n", &str[i]);
48
+
49
+ printf("0x%x\n", str + i);
50
+
51
+ printf("0x%x\n", &*(str + i));
52
+
53
+ }
54
+
55
+ }
56
+
57
+
58
+
59
+ 出力結果
60
+
61
+ a
62
+
63
+ a
64
+
65
+ 0xc93a0c0
66
+
67
+ 0xc93a0c0
68
+
69
+ 0xc93a0c0
70
+
71
+ b
72
+
73
+ b
74
+
75
+ 0xc93a0c1
76
+
77
+ 0xc93a0c1
78
+
79
+ 0xc93a0c1
80
+
81
+ c
82
+
83
+ c
84
+
85
+ 0xc93a0c2
86
+
87
+ 0xc93a0c2
88
+
89
+ 0xc93a0c2
90
+
91
+ d
92
+
93
+ d
94
+
95
+ 0xc93a0c3
96
+
97
+ 0xc93a0c3
98
+
99
+ 0xc93a0c3
100
+
101
+ e
102
+
103
+ e
104
+
105
+ 0xc93a0c4
106
+
107
+ 0xc93a0c4
108
+
109
+ 0xc93a0c4
110
+
111
+ ```