回答編集履歴
2
微修正
answer
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
こんにちは。
|
|
2
2
|
|
|
3
|
-
`int *x=0;` と `*x
|
|
3
|
+
`int *x=0;` と `*x=0;`の意味を混同されているように思います。
|
|
4
4
|
この2つの表記はちょっと似ていますが、全く意味が異なるのです。(個人的にはC言語の黒歴史と思います。)
|
|
5
5
|
|
|
6
6
|
前者は `int* x=0;` と捉えたほうが理解しやすいです。`int*`はint型へのポインタ型を意味しますから、int型ポインタ x を宣言し、0で初期化しています。(ポインタxが0番地を指すように設定する。)
|
|
@@ -9,6 +9,6 @@
|
|
|
9
9
|
もしも下記のように記述すると、ほとんどの処理系で不正メモリアクセスにて落ちます。
|
|
10
10
|
```C++
|
|
11
11
|
int* x=0;
|
|
12
|
-
*x
|
|
12
|
+
*x=0;
|
|
13
13
|
```
|
|
14
14
|
xはアドレス0番地を指し、その0番地に 0 を設定しようとしています。ほとんどの処理系で0番地にはメモリが割り当てられていませんのでアクセス違反となります。
|
1
微修正
answer
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
`int *x=0;` と `*x = 0;`の意味を混同されているように思います。
|
|
4
4
|
この2つの表記はちょっと似ていますが、全く意味が異なるのです。(個人的にはC言語の黒歴史と思います。)
|
|
5
5
|
|
|
6
|
-
前者は `int* x=0;` と捉えたほうが理解しやすいです。`int*`はint型へのポインタ型を意味しますから、int型ポインタ x を宣言し、0で初期化しています。(ポインタが0番地を指すように設定する。)
|
|
6
|
+
前者は `int* x=0;` と捉えたほうが理解しやすいです。`int*`はint型へのポインタ型を意味しますから、int型ポインタ x を宣言し、0で初期化しています。(ポインタxが0番地を指すように設定する。)
|
|
7
7
|
後者は、ポインタ x が指すメモリを 0 クリアしています。
|
|
8
8
|
|
|
9
9
|
もしも下記のように記述すると、ほとんどの処理系で不正メモリアクセスにて落ちます。
|