回答編集履歴

2

追加

2020/05/13 02:52

投稿

kazuhi
kazuhi

スコア15

test CHANGED
@@ -97,3 +97,11 @@
97
97
  今回のポインタの場合は、64bitのサイズのアドレスの値で、
98
98
 
99
99
  16進数で表すと 0000000000000000~FFFFFFFFFFFFFFFFで表現されるという事です。
100
+
101
+
102
+
103
+ > なので一回目に大きな値が表示されるのはわかるのですが、
104
+
105
+
106
+
107
+ 上記も少し違い、たまたま入っていた値でメモリ領域の先頭のアドレス値でもありません。

1

追加

2020/05/13 02:52

投稿

kazuhi
kazuhi

スコア15

test CHANGED
@@ -54,6 +54,22 @@
54
54
 
55
55
  「sizeof(int)*5」としていますので、int型を5個分、4(バイト)×5=20バイトの領域を確保しています。
56
56
 
57
+
58
+
59
+ > for(int i=0;i<10;i++){
60
+
61
+ printf("%d\n",p[i]); //←ここのp[1]では0と表示される
62
+
63
+ }
64
+
65
+
66
+
67
+ 上記では確保した領域以外の場所にアクセスしている事になります。本来なら問題が発生します。
68
+
69
+ (今回は参照しているだけなのでたまたま問題にならなかっただけ。そもそも値が設定されていないので全て無意味な値です)
70
+
71
+
72
+
57
73
  p[0]は、pが示すアドレスの先頭(0番目)のintの値を参照し、p[1]はその次(1番目)intの値を
58
74
 
59
75
  参照します。pが示す先頭アドレスから4バイトプラスされた位置にあります。