C 語言中的 i++ 與++i

Jinku Hu 2023年1月30日 2021年1月22日
  1. C 語言中++ii++ 記號的主要區別
  2. 在 C 語言中迴圈語句使用 ++i 符號作為普遍接受的風格
C 語言中的 i++ 與++i

本文將講解 C 語言中字首增量與字尾增量運算子,也就是 i++++i 的幾種使用方法。

C 語言中++ii++ 記號的主要區別

這兩個符號的基本部分是增量一元運算子++,它將運算元(例如 i)增加 1。增量運算子可以作為字首++i 出現在運算元之前,也可以作為字尾運算子-i++ 出現在運算元之後。

當在一個表示式中使用++ 運算子遞增的變數值時,會出現稍微不尋常的行為。在這種情況下,字首和字尾遞增的行為是不同的。也就是說,字首操作符在其值被使用之前遞增運算元,而字尾操作符在值被使用之後遞增運算元。

因此,使用 i++ 表示式作為引數的 printf 函式將在 i 的值被遞增 1 之前列印出來。另一方面,使用字首遞增操作符 ++iprintf 函式將列印遞增的值,在第一次迭代時為 1,如下例程式碼所示。

#include <stdio.h>
#include <stdlib.h>

int main() {
    int i = 0, j = 0;

    while( (i < 5) && (j < 5) ) {
        /*
        postfix increment, i++
        the value of i is read and then incremented
        */
        printf("i: %d\t", i++);
        /*
        prefix increment, ++j
        the value of j is incremented and then read
        */
        printf("j: %d\n", ++j);
    }

    printf("At the end they have both equal values:\ni: %d\tj: %d\n\n", i, j);

    exit(EXIT_SUCCESS);
}

輸出:

i: 0	j: 1
i: 1	j: 2
i: 2	j: 3
i: 3	j: 4
i: 4	j: 5
At the end they have both equal values:
i: 5	j: 5

在 C 語言中迴圈語句使用 ++i 符號作為普遍接受的風格

字尾和字首運算子在 for 迴圈語句中使用時具有相同的功能行為。在下面的示例程式碼中執行兩個 for 迭代時,它們列印 k 的值是相同的。

請注意,有幾種說法認為在 for 迴圈中使用字首增量比字尾有更好的效能效率,但在大多數應用中,有效的時間差異將可以忽略不計。我們可以養成使用字首操作符作為首選方法的習慣,作為一種普遍接受的風格。

但如果你已經在使用字尾表示法,那麼考慮到使用現代編譯器的相應優化標誌會自動消除低效的迴圈迭代。

#include <stdio.h>
#include <stdlib.h>

int main() {

    for (int k = 0; k < 5; ++k) {
        printf("%d ", k);
    }
    printf("\n");
    for (int k = 0; k < 5; k++) {
        printf("%d ", k);
    }
    printf("\n\n");

    exit(EXIT_SUCCESS);
}

輸出:

0 1 2 3 4
0 1 2 3 4
Author: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn

相關文章 - C Operator