c语言 知识总结

时间:2023-02-04 07:40:46

1、unsigned int 类型的数据与int类型的数据运算后自动转化为unsigned int 类型。
   比如说-20和6运算后就会变成一个很大的数;
  
  下面解释一个判断语句:
   (a+b>6)?{
      c=1
 
   }:(c=0);
   具体的意思就是如果a+b>6则c+1,否则C=0;
  // %f.2:表示的意思是小数点后保留几位;
  
2、隐式类型转换:
在混合类型的算式表达式中,最宽的数据类型肩负起了目标转换类型的责任,
   这被称为算术转换。(Arithmetic Conversion)
        int ab = 4;
  double ab = 4.111;
  此时ab=4.0;
  
表达式不同类型间的赋值】
在这时候目标转换类型是被赋值的对象,

用一个表达式传递给一个函数,表达式类型和形参类型不同: 此时的目标值是形参的值;
function momo(double)   momo(2)  结果值是double type;

函数返回值和i形参不同type
double difference(int );
目标类型为函数返回值类型;

3、 i?i
itn i = 3,j = 4;
i?i++;++j;
printf("%d %d\n",i,j);  the answer is 4,4;
等价于:(

   if(i=true){
     i++
   }else{
     ++j;
   }
 

4、很纠结的式子,:i++j;
mean is :first:i++;
          next: +j;

   
5、最扯淡的分析,
  x = x+1; x+=1;x++ 这三个式子哪个效率最高:
  从她得执行过程分析:
  第一个:先读取右X地址
          X+1;
    读取做X的地址;
    将右值传给左边的X;
  第二个:读取右X的地址;
           x+1
     得到值传给X(X地址早已经读出);
  第三个:效率最高
          读取有X的地址;
    X自增1.
   
6、编程规范方面:
      ‘A’==a比a=='A'合适: because 常量是不能被赋值的少写一个‘=’时能检查出错误

7、a、b交换:(神奇的算最大值的方法)
  扩展:abs( int x )是求整数的绝对值的 ,
  fabs( double x )是精确到双精度浮点型的求绝对值的
  简单的说就是保留的精度位数更高
     求两个数中最大的那个:
     int max  = ((a+b)+abs(a-b))/2(so牛逼);
  
  int c = a-b;
     char *strs[2] = {"a大","b大"}; 
  c = unsigned(c)>>(sizeof(int)*8-1) ;
     c=a-b,假如a<b的话,c为负数,转换为无符号数的话,最高位将是1
     第二句c=unsigned(c)>>(sizeof(int)*8-1);就是求c的最高位,
     之后只要判断是否为1就可以知道a和b哪个大了
  
  ----0、真正的交换来啦:
      不用中间变量交换:a、b;
   a^b 表示 a 和b 进行 异或运算
  
   a=a^b; 
   b=a^b;
   a=a^b;
  
8、c、c++的区别;
 
    (1)、c++支持函数的重载,c不支持,c++中的 void foo(int x,int y).
 被C编译后就成了 void _foo();
 (2)、头文件中的ifndef、define、endif是防止头文件被重复引用的!!
 (3)、<filename.h>是在标准库路径开始搜索的
      "filename.h"是从用户的工作路径开始搜索的!!
     
9、如何判断一段程序是C还是C++;
      1、C是void main()而标准C++是int main() ;
   2、文件就不同
      c++有输入输出流文件即#include<iostream>
      c用的是scanf 和printf
      而c++用的是cout 和cin
      3、c++有类的定义,c是没有的
      4、C++在编译时定义了_cplusplus,C编译时定义了_STDC.

10、主函数想不到的地方,
        在main函数退出执行之后,可以使用atexit()函数注册一个函数,
         注意需要<stdlib.h>文件;

 

 c语言 知识总结