当前位置:编程学习 > C/C++ >>

C语言学习笔记

1、逻辑运算符 || &&
      如果运算符左边的子表达式决定了最终的结果,则右边的子表达式不会计算
      例如:
      if(d != 0 && n/d > 0) {
            /* average is greater than 0 */
       }
      if(p == NULL || *p == '\0') {
            /* no string */
       }
      在第一个例子中,如果没有短路行为,一旦d=0,则右边的表达式会被0除--系统可能会崩溃;第二个例子中,如果p是空指针,则右边的表达式引用一个空地址,从而可能导致系统崩溃。
 
2、C语言实参求值顺序
      C标准对实参的求值顺序并没有统一规定,但是多数系统对函数参数的求值顺序是自右向左。
      i = 3; printf("%d, %d\n", i, i++);
      输出结果是:4,3
 
3、i++ 与 ++i运算符
      i = 3; j = (++i)+(++i)+(++i);
      printf("j = %d, i = %d\n", j, i);
      输出结果为:j = 16, i = 6(gcc编译器)
       不同编译器,结果可能不一样。计算机在计算j = (a+b)+(c+d)+(e+f)时,先计算(a+b)+(c+d),并把结果存储(例如:存储在j中),然后再计算j+(e+f)=j;计算机中只有一个i,计算第二个i时,第一个i已改变。
        int i = 1, j = 1, k;
        i = (i++) + (++i);
        k = (j++) + (++j);
        printf("i = %d,j=%d, k=%d \n", i, j, k); 
       输出结果为:i = 5, j = 3, k = 4(gcc编译器)
 
补充:软件开发 , C语言 ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,