屁哥 发表于 2017-3-18 11:57:00

请教 逗号运算符问题 各位师兄指点指点小弟

b的值 是不是这样求的 答案说是5

表达式a = (b = 3, 4, c = b++ + 5, ++c + ++b)
                   b = 3       c = 3++ + 5, ++c + ++b
                   b = 4   c =8         9   +5
                   b = 4(这个4 是b++得来的 不是b = 3, 4 里面的4)能理解成 b = 3, 4中的 4是打马虎眼 没有用的么
                  
                   那我想问b = 3, 4什么条件 b = 4(b什么时候等于3, 后面的4)
                                    为什么b 不是直接等于4
                  这样写 是不是b就直接等于4 了 (b = 3, 4)在一个小括号里?
                                                      (b = 4)
                  

人造人 发表于 2017-3-18 12:56:18

说真的,纠结这类问题没有意义

        int a, b, c;

        a = (b = 3, 4, c = b++ + 5, ++c + ++b);
00A3204Emov         dword ptr ,3
00A32055mov         eax,dword ptr
00A32058add         eax,5
00A3205Bmov         dword ptr ,eax
00A3205Emov         ecx,dword ptr
00A32061add         ecx,1
00A32064mov         dword ptr ,ecx
00A32067mov         edx,dword ptr
00A3206Aadd         edx,1
00A3206Dmov         dword ptr ,edx
00A32070mov         eax,dword ptr
00A32073add         eax,1
00A32076mov         dword ptr ,eax
00A32079mov         ecx,dword ptr
        int a, b, c;

        a = (b = 3, 4, c = b++ + 5, ++c + ++b);
00A3207Cadd         ecx,dword ptr
00A3207Fmov         dword ptr ,ecx

        printf("a = %d, b = %d, c = %d\n", a, b, c);
00A32082mov         eax,dword ptr
00A32085push      eax
00A32086mov         ecx,dword ptr
00A32089push      ecx
00A3208Amov         edx,dword ptr
00A3208Dpush      edx
00A3208Epush      offset string "a = %d, b = %d, c = %d\n" (0A37BFCh)
00A32093call      _printf (0A31343h)
00A32098add         esp,10h

人造人 发表于 2017-3-18 12:57:08

#include <stdio.h>

int main(void)
{
        int a, b, c;

        a = (b = 3, 4, c = b++ + 5, ++c + ++b);

        printf("a = %d, b = %d, c = %d\n", a, b, c);

        return 0;
}

a = 14, b = 5, c = 9
请按任意键继续. . .

Icetone 发表于 2017-3-18 13:03:10

页: [1]
查看完整版本: 请教 逗号运算符问题 各位师兄指点指点小弟