C語言OPERATOR問題

本帖最後由 haloPaul 於 2018-11-7 15:02 編輯

#include <stdio.h>
int main() {
        char ch = 'B';
    int x = 4, y = 3, z;
        float k = 1.5;
        z = y++ - ++y;
        printf("%d", z);
        return 0;
}


我用C語言編譯器,Z答案等於-2,一直想不到為什麼答案會是-2?
請C語言高手指點一二,謝謝!

#include
int main() {
        char ch = 'B';
    int x = 4, y = 3, z;
        float k = 1.5;
        z = y++ - ++y;
        pri ...
haloPaul 發表於 2018-11-7 14:39


https://en.cppreference.com/w/c/language/operator_precedence

TOP

我知道OPERATOR有優先性,其實我看完都不明白為什麼答案會是-2

TOP

"z = y++ - ++y;" ->  "z = a - b"
y++ 在這裡時, 仲係 y = 3, 即係 a = 3, 行過左佢, 就係 y = 4.
到 ++y 時, y 就係 5, 所以 b = 5.
z = 3 - 5 = -2.

TOP

"z = y++ - ++y;" ->  "z = a - b"
y++ 在這裡時, 仲係 y = 3, 即係 a = 3, 行過左佢, 就係 y = 4.
到 ++y  ...
IanW 發表於 2018-11-7 15:28


首先感謝您的答覆。但是有一個地方不明白,++y在優先權是優先過y++,那麼,不是先運算了++y再運算y++嗎?

TOP

首先感謝您的答覆。但是有一個地方不明白,++y在優先權是優先過y++,那麼,不是先運算了++y再運算y++嗎? ...
haloPaul 發表於 2018-11-7 15:45



    點解++y在優先權是優先過y++?

TOP

首先感謝您的答覆。但是有一個地方不明白,++y在優先權是優先過y++,那麼,不是先運算了++y再運算y++嗎? ...
haloPaul 發表於 2018-11-7 15:45

人地post 條link都講到名y++係優先過++y喎

TOP

本帖最後由 smoke_cheese 於 2018-11-7 18:51 編輯

Undefined behaviour (value (of y) modified twice within the expression, i.e. between sequence points)

http://c-faq.com/expr/seqpoints.html

TOP

千其唔好寫咁嘅code
就算你而家明白左點解
過幾個月後可能會唔記得, 或者你d teammates會唔明
到時又要查reference, 又要花時間test, 又要傷腦筋

programming唔係要寫最精簡嘅code
唔係要最叼轉, 耍小聰明
而係要最清淅, 最易maintain

TOP

千其唔好寫咁嘅code
就算你而家明白左點解
過幾個月後可能會唔記得, 或者你d teammates會唔明
到時又要查re ...
wfshop 發表於 2018-11-7 19:19


如果咁都睇唔明係咪應該砍掉重練?

TOP