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

質問編集履歴

3

修正

2017/01/18 15:01

投稿

strike1217
strike1217

スコア651

title CHANGED
File without changes
body CHANGED
@@ -45,7 +45,6 @@
45
45
  ```
46
46
  結果は、
47
47
  &(v) = 002EFED4
48
- &(v.j) = 002EFED4
49
48
  &(v.g) =002EFED8
50
49
 
51
50
  ちゃんとアドレスが出てきます。

2

修正

2017/01/18 15:01

投稿

strike1217
strike1217

スコア651

title CHANGED
File without changes
body CHANGED
@@ -45,8 +45,8 @@
45
45
  ```
46
46
  結果は、
47
47
  &(v) = 002EFED4
48
- &(v -> j) = 002EFED4
48
+ &(v.j) = 002EFED4
49
- &(v -> g) =002EFED8
49
+ &(v.g) =002EFED8
50
50
 
51
51
  ちゃんとアドレスが出てきます。
52
52
 

1

追記

2017/01/18 15:00

投稿

strike1217
strike1217

スコア651

title CHANGED
File without changes
body CHANGED
@@ -10,4 +10,45 @@
10
10
  シンタックスシュガーですか?
11
11
 
12
12
  (((s *)0) -> mem)
13
- この部分の式について何をやっているのか詳しく教えてください。
13
+ この部分の式について何をやっているのか詳しく教えてください。
14
+
15
+ [追記]
16
+ 実験してみました。
17
+
18
+ ```C
19
+ struct d {
20
+ int j;
21
+ char g;
22
+ long r;
23
+ }a;
24
+
25
+ printf("%p, %p, ", &(a), &(a.g));
26
+ printf("%d\n", &(a.g) - &(a));
27
+
28
+ struct d *v = NULL;
29
+ // printf("%d", v ->j); segmentation fault
30
+ printf("&(v) = %p\n", &(v));
31
+ printf("&(v -> j) = %p\n", &(v -> j));
32
+ printf("&(v -> g) =%p\n", &(v -> g));
33
+ ```
34
+
35
+ &(v) = 00C2FE5C
36
+ &(v -> j) = 00000000
37
+ &(v -> g) =00000004
38
+ こんな結果になりました。オフセットになっております。
39
+
40
+ ```C
41
+ struct d v;
42
+
43
+ printf("%p", v);
44
+ printf("%p", v.g);
45
+ ```
46
+ 結果は、
47
+ &(v) = 002EFED4
48
+ &(v -> j) = 002EFED4
49
+ &(v -> g) =002EFED8
50
+
51
+ ちゃんとアドレスが出てきます。
52
+
53
+ 分からないのは、「ヌルポインタにしたときに、なんで、アドレスがオフセットに変化しているか・・・」
54
+ ということです。