几种C语言奇特用法及使用误区

Top1: switch还能这样用?

#include <stdio.h>
int main(int argc, char *argv[])
{
        int a = 0;
        scanf("%d",&a);
        switch(a)
        {
                case 0 ... 10:
                        printf("a = %d\n",a);
                        break;
                case 11 ... 20:
                        printf("b = %d\n",a);
                        break;
                default:
                        break;

        }
        return 0;
}

该语法虽未在C标准中提到,但事实是大多数编译器都能够支持。当多个连续的case需要执行同一功能的时候,这样写更直观,省事。

执行结果:

Top2: 三目运算符省略第二个表达式

#include <stdio.h>
int main(int argc, char *argv[])
{
        int a = 5;
        int b = 5;
        int c = 5;
        int d = 5;
        printf("a=%d\n",a>0?:0);
        printf("b=%d\n",b<0?:0);
        printf("c=%d\n",c++?:0);
        printf("d=%d\n",++d?:0);
        return 0;
}

三目运算符缺省第二个表达式时,其缺省值即第一个表达式的值。

参考:https://blog.csdn.net/fangye945a/article/details/102751933

执行结果:

Top3:++遇上+,--遇上-

#include <stdio.h>
int main(int argc, char *argv[])
{
        int a = 5;
        int b = 6;
        int c = a+++b;

        int d = 4;
        int e = 3;
        int f = d---e;

        printf("a = %d  b = %d c = %d\n",a,b,c);
        printf("d = %d  e = %d f = %d\n",d,e,f);
        return 0;
}

C语言贪心法则。参考: https://blog.csdn.net/yygydjkthh/article/details/4422811

执行结果:

Top4:sizeof()不参与运算

#include <stdio.h>
int main(int argc, char *argv[])
{
        int a = 5;
        int b = 5;
        int c = sizeof(a++);
        int d = sizeof(++b);
        printf("a=%d b=%d c=%d d=%d\n",a,b,c,d);
        return 0;
}

 a++和++b并没有被执行。

执行结果:

猜你喜欢

转载自blog.csdn.net/fangye945a/article/details/106806212