質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
ポインタ

ポインタはアドレスを用いてメモリに格納された値を"参照する"変数です。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

3回答

754閲覧

c++でポインタを使っているときの動作

cactakaesu

総合スコア8

ポインタ

ポインタはアドレスを用いてメモリに格納された値を"参照する"変数です。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2017/03/30 06:20

###該当のソースコード

c++

1int main(){ 2 int *x; 3 int *y; 4 int *NIL; 5 // cout << x == NIL << endl; 6 printf("%d\n",x == NIL); 7 if( x == NIL){ 8 cout << "NIL!!" << endl; 9 } 10 else{ 11 cout << "not NIL..." << endl; 12 } 13 return 0; 14} 15

###発生している問題

この時の出力結果は
0
not NIL...
ですが,
int *yを消すと出力結果が
1
NIL!!
になります

なぜこのように全く関係ないポインタ変数*yが存在するかどうかがx == NILの値に影響を与えるのですか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

C++では、ローカル変数は宣言しただけでは、入っている値は不定です。そして、不定の値を使った場合、未定義の動作といって、プログラムが動作することすら保証されない状態となります。

つまり、上のコードは、「たまたまそういう結果になった」だけで、出力結果は偶然の産物です。

投稿2017/03/30 06:26

maisumakun

総合スコア145183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

いやだから、そのときの x, y, NIL は不定。それぞれどんな値かは決まっていないから、
その後に続く if ( x == NIL ) が真か偽かも不定。

どうなるかわからないものに何故と聞かれてもナンセンス。

投稿2017/03/30 06:27

episteme

総合スコア16614

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

こんにちは。

x, y, NIL全て初期化されていませんので、値は不定です。
何かの偶然が作用してたまたまそのような動作をしたのではないかと思います。

投稿2017/03/30 06:27

Chironian

総合スコア23272

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問