for(i=0;i<10;i++)
a[i]=i;
k=5;
a[k++]=(k>5 || k++<6)? 10: 20;
for(i=0;i<10;i++)
printf("%d %d\n",i,);
printf("%d\n",k);
こういうプログラムを作成してgccでコンパイルして実行したとき,
0 0
1 1
2 2
3 3
4 4
5 10
6 6
7 7
8 8
9 9
7
という結果になったのですが、5 10という結果になったのが理解できません。どうしてこのような結果になったのでしょうか?またvisualstudioで実行した場合a[6]=10という結果になったのですがこれもどうしてでしょうか?ぜひ詳しく教えてくださいお願いします。

A 回答 (3件)

インクリメント, デクリメントや (複合) 代入演算子で変数の値を変えた場合, その変数の変更前の値は「新しい値を決めるため」にのみ使うことができます. この制約が守られていないプログラムがどのように動作するかは決められておらず, どのように動作しようとも (そして動作しなくても) よいとなっています.


このことから, インクリメントやデクリメントについては「その変数は他の場所で現れてはならない」ということになります.
今のプログラムでは a[k++] = ... の文で, 左辺でインクリメントした k が右辺でも現れてしまっています. それがおかしな振舞いをしている本質的な問題です.
    • good
    • 0
この回答へのお礼

ありがとうございます。よく分かりました。

お礼日時:2008/05/05 12:58

a[k++]=(k>5 || k++<6)? 10: 20;


この式が問題ですね。
この式の中にkが3個でてきますが、実行中にkの値が変化しています。
この式をどの場所から計算するかはコンパイラの自由なので3回出てきたkの値が5なのか6なのか7なのかコンパイラの都合で決まります。gccはおそらく左辺のk++を一番最初に実行し、その後右辺の計算時にはkは6になっていたと考えられます。
VisualStudioは右辺の計算を先にやったために右辺のa[k++]=の計算時にはkはすでに6になっていたと思われます。
このような書き方をすると期待通りの結果が得られる保障が無いので、してはいけない書き方とされています。
    • good
    • 0
この回答へのお礼

そういうことだったんですね!よく分かりました。ありがとうございます。

お礼日時:2008/05/05 12:51

> a[k++]=(k>5 || k++<6)? 10: 20;



一つの文の中で k を2回インクリメントしていることについての、
処理系による解釈の違いが出ているのだと思います。
    • good
    • 0
この回答へのお礼

解答ありがとうございます。がんばってみます。

お礼日時:2008/05/05 12:50

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

今、見られている記事はコレ!

  • 基本情報技術者試験の言語ってどうやって選ぶ?

    SEを目指す場合、基本情報技術者試験を経て実務に就いた人も多いのではないでしょうか。教えて!gooにはSEを目指している質問者からこんな質問が寄せられました。 「基本情報技術者試験のC言語とJavaの違い?」 将...

  • 人気の美猫あなごちゃんが1日店長に!書泉ブックタワーで撮影会を開催

    映画『猫侍』シリーズの玉之丞役などで知られるにゃんこ、あなごちゃん。 くりっとした大きな目と品のある整った顔立ちが人気で、映画だけでなく、ドラマやCMでも大活躍中だ。その、あなごちゃんの写真を自由に撮影...

  • 今年の梅雨の傾向を気象予報士が解説!

    ここのところ東京でも雨の日が多い気がするが、まだ梅雨には入っていないらしい。「教えて!goo」には「梅雨になると嫌なことを教えて!」という質問が投稿されているが、「洗濯ものが乾ききにくい&外に干せない! ...

  • 牛丼まで割り勘の彼と暮らせる!?

    付き合っている彼氏や彼女のお金の使い方を見ていて、相手の金銭感覚が理解できず結婚を躊躇してしまうという話をたまに聞くが、その真っ只中で悩んでいる女性が「教えて!goo」に「牛丼さえ割り勘の彼氏」といった...

  • 【ヨーグルトとハチミツで作る】篠原涼子特製 生姜焼き

    ご飯がすすむおかずの定番、生姜焼き。家庭によって、またお店によって、様々なレシピがある中、女優の篠原涼子さんの作る特製生姜焼きのレシピが非常に興味深い。テレビで披露されたことのあるこの作り方は、なんと...

おしトピ編集部からのゆる~い質問を出題中

お題をもっとみる


このカテゴリの人気Q&Aランキング

おすすめ情報

カテゴリ