#3
by asd » 7年前
fly3555 さんが書きました:
これを実行すると何のエラーもなく通ります。p[1],p[2]に関してはメモリの確保を行っていないのに代入できて大丈夫なのでしょうか。
pはint型の要素1つ分しか確保していないのでp[1]やp[2]にアクセスしてはいけません。
配列の添え字の範囲チェックはしてくれないのでエラーも出なければ、なんとなく動作するかもしれませんが、
p[1]やp[2]の領域はほかの用途で使われる可能性もあるので読み取りも書き込みもしてはいけません。
(ほかの変数領域を破壊したり、おかしな値が取得できたりと意図しない動作をします)
糖衣構文(syntactic sugar)であっても*(p+1)や*(p+2)にアクセスしてはいけません。
リンク先でも指摘されていることではありますが誤解しないようご注意ください。
[quote="fly3555" id=3,19519,147567]
これを実行すると何のエラーもなく通ります。p[1],p[2]に関してはメモリの確保を行っていないのに代入できて大丈夫なのでしょうか。[/quote]
pはint型の要素1つ分しか確保していないのでp[1]やp[2]にアクセスしてはいけません。
配列の添え字の範囲チェックはしてくれないのでエラーも出なければ、なんとなく動作するかもしれませんが、
p[1]やp[2]の領域はほかの用途で使われる可能性もあるので読み取りも書き込みもしてはいけません。
(ほかの変数領域を破壊したり、おかしな値が取得できたりと意図しない動作をします)
[quote="Math" id=3,147569]int arr[i]はint *(arr+i)のsyntactic sugarだからです
[url]http://dixq.net/forum/viewtopic.php?f=3&t=8134[/url][/quote]
糖衣構文(syntactic sugar)であっても*(p+1)や*(p+2)にアクセスしてはいけません。
リンク先でも指摘されていることではありますが誤解しないようご注意ください。