C语言学习笔记(二)
C语言类型转换:
1. example:
int a;
a = 3.2 + 3 / 4.0; //先转换成double,得0.75
//3.2 + 0.75 = 3.95
//因为a是整数,最后的结果决定于a的类型(即等号左边的类型),结果为3。
2.隐式转换:
a.运算转换——不同类型数据混合运算时;
b.赋值转换——把一个值赋予类型不同的变量时;
c.输出转换——输出时转换成指定的输出格式;
d.函数调用——实参与形参类型不一致时转换。
运算转换:
(a)char, short 自动转换>int,
(b)float 自动转换>double
在参与数学运算时只有int和double两种类型。所有的数学函数名的返回值都是double类型。
3.
example:
double x = 3.4;
(int)x;
首先在内存栈中分配八个字节作为x的空间;在常量区中也有八个字节存储3.4;再在临时空间中分配四个字节,将"3"存入这四个字节中。强制类型转换得到所需类型的中间变量,原变量值不变。
4. ++,--(后置):先使用后执行
int a[10];
int *p = a;
m = *p++; //==>m = *(p++);
相当于m = *p; p++;
++(后置)和*都处于同一个优先级,结合顺序是自右向左。
5.在C语言中"="赋值是一个运算符,也是有运算结果的,其运算结果与其左值是一样的。
example:
b = a = 2; 先计算a = 2,再将a = 2的运算符结果赋给b。
example:
int a;
a = 10;
这里存在运算转换,因为10是一个short类型的常量,而赋给a后转换成int类型。
6.",": 逗号运算符,它的值是最后一个表达式的值。
7. int main(): 正常返回是"0",出错返回非零值
8. I/O缓冲
a.缓冲被写满
b.文件被关闭时,缓冲——>磁盘
c.flush()强制刷缓冲
d.程序崩溃的时候,不会写到磁盘中去。
9.用最少的空间交换两个数据
int a,b; int a,b,temp;
a = a + b; temp = a;
b = a - b; <== a = b;
a = a - b; b = temp;
用最少的空间,最快的方式交换两个数
int a,b;
a = a ^ b;
b = a ^ b;
a = a ^ b;
因为两个相同的数'^'为零,如 a^a^b = b; ==> 0^b = b;
10.
int main()
{
int *p; //这是不对的,p此时是一个空指针
scanf("%d", p);
}