質問編集履歴

3

修正

2017/01/18 15:01

投稿

strike1217
strike1217

スコア651

test CHANGED
File without changes
test CHANGED
@@ -92,8 +92,6 @@
92
92
 
93
93
  &(v) = 002EFED4
94
94
 
95
- &(v.j) = 002EFED4
96
-
97
95
  &(v.g) =002EFED8
98
96
 
99
97
 

2

修正

2017/01/18 15:01

投稿

strike1217
strike1217

スコア651

test CHANGED
File without changes
test CHANGED
@@ -92,9 +92,9 @@
92
92
 
93
93
  &(v) = 002EFED4
94
94
 
95
- &(v -> j) = 002EFED4
95
+ &(v.j) = 002EFED4
96
96
 
97
- &(v -> g) =002EFED8
97
+ &(v.g) =002EFED8
98
98
 
99
99
 
100
100
 

1

追記

2017/01/18 15:00

投稿

strike1217
strike1217

スコア651

test CHANGED
File without changes
test CHANGED
@@ -23,3 +23,85 @@
23
23
  (((s *)0) -> mem)
24
24
 
25
25
  この部分の式について何をやっているのか詳しく教えてください。
26
+
27
+
28
+
29
+ [追記]
30
+
31
+ 実験してみました。
32
+
33
+
34
+
35
+ ```C
36
+
37
+ struct d {
38
+
39
+ int j;
40
+
41
+ char g;
42
+
43
+ long r;
44
+
45
+ }a;
46
+
47
+
48
+
49
+ printf("%p, %p, ", &(a), &(a.g));
50
+
51
+ printf("%d\n", &(a.g) - &(a));
52
+
53
+
54
+
55
+ struct d *v = NULL;
56
+
57
+ // printf("%d", v ->j); segmentation fault
58
+
59
+ printf("&(v) = %p\n", &(v));
60
+
61
+ printf("&(v -> j) = %p\n", &(v -> j));
62
+
63
+ printf("&(v -> g) =%p\n", &(v -> g));
64
+
65
+ ```
66
+
67
+
68
+
69
+ &(v) = 00C2FE5C
70
+
71
+ &(v -> j) = 00000000
72
+
73
+ &(v -> g) =00000004
74
+
75
+ こんな結果になりました。オフセットになっております。
76
+
77
+
78
+
79
+ ```C
80
+
81
+ struct d v;
82
+
83
+
84
+
85
+ printf("%p", v);
86
+
87
+ printf("%p", v.g);
88
+
89
+ ```
90
+
91
+ 結果は、
92
+
93
+ &(v) = 002EFED4
94
+
95
+ &(v -> j) = 002EFED4
96
+
97
+ &(v -> g) =002EFED8
98
+
99
+
100
+
101
+ ちゃんとアドレスが出てきます。
102
+
103
+
104
+
105
+ 分からないのは、「ヌルポインタにしたときに、なんで、アドレスがオフセットに変化しているか・・・」
106
+
107
+ ということです。