みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

前置き・後置きインクリメント。

いつも大変お世話になり誠にありがとうございます。
標記の件。
参考書を見て、考えましたがピンときません。
どなたか解りやすく説明してもらいませんでしょうか?
2種類のコードと実行は下記の通りです.

test1.c

#include <stdio.h>

int main(void)
{
int a = 0;
int b = 0;

b = a++;

printf("代入後にインクリメントしたのでbの値は%dです。\n", b);

return 0;

}

C:\MinGW>gcc test1.c -o test1

C:\MinGW>test1.exe
代入後にインクリメントしたのでbの値は0です。

test2.c
#include <stdio.h>

int main(void)
{
int a = 0;
int b = 0;

b = ++a;

printf("代入前にインクリメントしたのでbの値は%dです。\n", b);

return 0;

}
C:\MinGW>gcc test2.c -o test2

C:\MinGW>test2.exe
代入前にインクリメントしたのでbの値は1です。

前置き・後置きインクリメントの違いを論理的に

ご説明願えませんでしょうか。

ご回答の程宜しくお願い申し上げます。

投稿日時 - 2018-04-04 22:06:52

QNo.9485130

困ってます

質問者が選んだベストアンサー

>前置き・後置きインクリメント。
>参考書を見て、考えましたがピンときません。
>どなたか解りやすく説明してもらいませんでしょうか?
参考書を読んでも、実際の動作を見ても分からないようではプログラマーの素質がありませんので学習を止めた方が良いと思います。
提示のインクリメント演算子(++)は変数(a)の左または右に付けることで変数(a)に1を加えた値を元の変数(a)へ代入するという動作をするように決められています。
また、変数(b)へインクリメント演算子が付いた変数の値を代入するときは次のような結果になることを規定しています。
b = a++; は「aの値をbへ代入してからaの値に1を加える」という動作になります。(b = a;a = a + 1; と同じ)
b = ++a; は「aの値に1を加えてから、その結果をbへ代入する」という動作になります。(a = a + 1;b = a; と同じ)
これはプログラム上の約束事なのでそのまま覚えないといけません。

投稿日時 - 2018-04-05 09:39:17

お礼

いつもお世話になり誠に有難うございます。

プログラムの約束事として覚えます。

投稿日時 - 2018-04-05 10:55:46

ANo.3

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.2

printfで出力している文章そのまんまの意味ですよ?

>b = a++;
>
>printf("代入後にインクリメントしたのでbの値は%dです。\n", b);
変数aの値を変数bに代入した後に変数aの値を+1
b=a;
a += 1;

>b = ++a;
>
>printf("代入前にインクリメントしたのでbの値は%dです。\n", b);
変数aの値を変数bに代入する前に変数aの値を+1
(先に変数aの値を+1し変数aの値を変数bに代入)
a += 1;
b = a;

投稿日時 - 2018-04-05 03:13:20

お礼

ご回答誠に有難うございます。

投稿日時 - 2018-04-05 10:51:45

ANo.1

論理的?そのまんまですけど。
b=a++はb=a;a++;
b=++aはa++;b=a;
ということですね。

投稿日時 - 2018-04-04 22:15:49

お礼

ご回答誠に有難うございます。

投稿日時 - 2018-04-04 23:16:52

あなたにオススメの質問