C言語のprintf()で++演算子を使ったときの出力結果を徹底解説
C言語の学習や競技系の試験では、printf() の引数にインクリメント演算子(++)が含まれたコードの「出力結果を求めよ」という問題がよく出題されます。一見シンプルなコードに見えて、実際に出力される数値は直感と異なることが多く、多くの人を悩ませるポイントです。
この記事では、典型的な例題を取り上げながら、なぜそのような出力になるのかを順を追って分かりやすく解説します。
サンプルコード
#include<stdio.h>
int main() {
volatile int x = 20;
printf("%d %d\n", x, x++);
x = 20;
printf("%d %d\n", x++, x);
x = 20;
printf("%d %d %d ", x, x++, ++x);
return 0;
}解説:引数はどのような順序で評価されるのか?
ポイントとなるのは、多くのコンパイラは printf() の引数を「右から左」へ評価するという点です。
最初の printf() 文を見てみましょう。
printf("%d %d\n", x, x++);引数は右側から評価されるため、まず最後の引数 x++ が処理されます。x++ は後置インクリメントなので、現在の値 20 を出力してから、x を 21 に増加させます。続いて、後ろから2番目の引数 x が評価され、この時点ではすでに 21 になっているため 21 が出力されます。
他の行も同じ考え方で計算できます。
前置演算子(++x)と後置演算子(x++)の違い
++x(前置): 値を出力する前に1増加させます。x++(後置): 現在の値を先に出力してから1増加させます。
3つ目の printf() では、右から順に ++x → x++ → x の順で評価されるため、「22 21 21」という一見不思議な並びの出力になります。
補足: 厳密には、C言語の標準規格上、同一式内での x の変更と参照の評価順序は未定義(unspecified)とされており、コンパイラによって結果が異なる可能性があります。実際の開発では、このような書き方は避け、文を分けて記述することが推奨されます。
出力結果
21 20 20 20 22 21 21
実際にコードを実行して出力を確認すると、理解がさらに深まります。ぜひ手元の環境でも試してみてください。
-
DuckDuckGoの検索演算子を使いこなして、より速く・より正確な検索結果を得る方法
オンラインで欲しい情報がどうしても見つからない——そんな経験はありませんか。特に、Googleのような巨大検索エンジンからDuckDuckGoへ乗り換えたばかりの頃は、検索に戸惑うことも多いでしょう。DuckDuckGoがGoogleほど膨大な検索結果を表示しないのは周知の事実ですが、その分、広告や不要なリンクを漁る必要がなく、検索内容も追跡されません。プライバシーを守りながら効率よく検索するために、知っておきたいのが「検索演算子」と「!bang」です。本記事では、DuckDuckGoでの検索精度を高める検索演算子の使い方と、検索をさらに高速化できるインスタント機能について詳しく解説します。D
-
YouTube検索を劇的に改善!高度な検索演算子とフィルターの使い方ガイド
これからYouTuberとして活動を始めようとしている方や、自分の動画を適切なキーワードで検索結果に表示させたい方にとって、YouTubeはあらゆる世代のユーザーが動画を楽しんでいる巨大なプラットフォームです。YouTubeはユーザーがより良い検索結果を得られるよう、常に改善を重ねてきました。最近では、就寝時間にデバイスを置くよう促す「おやすみリマインダー機能」も追加されています。 YouTubeで正確なキーワード検索を行うには? ここでは、YouTubeの高度な検索を活用するためのコツをいくつかご紹介します。これらのテクニックを覚えておけば、膨大な動画が存在するプラットフォーム上でも、目的の