第二天

一、上次提到类型转换

  unsigned int 和 long进行运算时,会转化成 unsigned long

  double转float:如果原值超过目标范围,则结果为NaN(正无穷或负无穷)

  float转int:丢弃小数部分,如果原值整数部分超过目标范围则结果错误

  大整数转小整数int转short:截断高位字节,保留低位字节,若原值超过范围则结果错误

  相同字节的整数:unsigned int 转 int 或  int 转 unsigned int,保持原码不变,结果可能改变符号

  有符号整数转大整数:符号位会进行扩展,低位字节不变。

  无符号小整数转大整数:高位字节用0填充,低位字节不变,能保持符号和值。

 

强制类型转换:显式类型转换,用类型转换符指明转换的一种操作

  比如:y=(double)a/b,a和b均为整数

  计算过程是:先将a转化为double型,又因为除法的两个操作数类型要一致,所以将b也转化为double型,然后再进行计算。

  但是如果是:y=double(a/b)则是先将a和b进行整数的除法运算得到一个整数,再将这个整数转为double类型,区别很大,可以自己列一个去试试。

 

这边强调一个左值和右值问题:  

  左值一般指变量,能存放数据的空间。

  右值就是能放在赋值号右边的表达式。

  左值加上前置自增或自减还是左值。

  但是左值加上后置自增或自减就是右值。  

  右值一般是不能给它们赋值的。左值可以作为右值。

  整数/double型所得到的值是整数型。    就是看/左边是什么,就要把/右边的值转化为什么类型。

  a-=a+=a*a;   假设一开始a=5;则a最终的值为0;

  要记住int  和 unsigned是会往 unsigned转化的。

  a?b:c;这种符号表达式是会先将b和c往哪一边精度高的先转化,然后再进行赋值。

  像这种---x+y,负号不能一堆连在一起,但是在中间岔开就可以。

 

二、基本语句

  •   if
  •   else if
  •   else

  这里的else相当于在if的基础上进行嵌套,当if为false时,执行else if。

  这里也没啥东西,都是非常基础的东西啦。

 

三、函数预处理

  函数名称和形参(包括个数和类型)作为函数的基调。

  静态全局变量只能在本文件内使用。

  非静态全局变量可以在其他文件使用。我们通常说的全局变量是指非静态全局变量。

  static可以修饰函数,使它只能在本文件内使用。

  宏定义的默认值是1

 

四、数组

  decltype(a1) b1  以a1类型来定义b1;

  下标越界访问是不会有错误提示的,只是访问相邻的内存单元,如果仅仅读取元素,结果无法估计;如果改变元素,可能导致严重错误。

  for(auto e:a)  这里的e只是a中元素的一个拷贝,如果改变e是不会影响到a中的元素的。

  但是for(auto &e:a)这是的e是a的一个引用,改变e是会改变a中的元素的。

  但是这种循环方式是不能用于函数形参的,因为for的范围是没办法确定的。

  数组可作为函数的形参,一个函数不能返回一个数组,因此往往返回一个指针来指向一个数组。

  

  数组作为形参,如果有const修饰,则函数体中不能改变实参数组的元素。

  数组实参传递给形参,但是没有包含实参数组的长度,往往需要增加一个形参来表示数组的长度。

 

五、字符串和字符数组

  这里姑且将数组和字符方面的东西分开。

  字符数组就是有字符型元素组成的数组,而字符串则是由0值结尾的字符数组。

  如果混有中英文的话,就会采用gbk编码。中文占两个字节。

  

    

 

 

 

 

 

 

 

 

 

 

 

 

  

 

 

  

  

 

posted on 2021-12-25 17:02  Krcoding  阅读(80)  评论(0)    收藏  举报