C语言复习笔记
仅记录复习过程中的混淆和记忆模糊的知识点。
1、常量-八进制整数
在C语言中,如果一个整数是以 0
开头的,那么这个数是以八进制来表示的,即八进制整数。0x
为十六进制整数。
2、
一个整数,例如1500,为 int 类型(21亿),如果是 1500L,则表示长整型,1500U 为无符号整型(42亿)。
3、
实型常量均为 double 类型,以8个字节存放,有效位数16位,加F后缀为 float 类型,有效位数为7位。
4、
\ddd
表示1至3位,八进制数所代表的字符,\xhh
表示1至2位十六进制数所代表的字符。
5、
字符串常量最后有一个\0
6、
#define 符号名 常量值
7、
声明变量但是未初始化,该变量已占用空间,其中存放随机数。而声明+初始化则是既申请了地址空间,又初始化其中的值。
8、
int putchar(int ch)
把字符C输出到屏幕上
putchar(65),输出的是A,65被当作ASCII码
9、
printf 输出时,格式为 %[修饰符]格式字符
%d或者%i 输出的是十进制整数
%e或%E输出的是指数形式浮点小数
%%输出%
10、
这里的 m 是整个数的宽度,而不是小数点前的整数部分的宽度。
.n 对于字符串,是确定输出位数
这里h表示 short 类型。
%d:把输入解释成一个有符号十进制整数
%hhd:把整数读作signed char 或 unsigned char,一个h输出2个字节,2个h输出1个字节。所以char的时候可以用2个h,short时用1个h。
输出类型不一样。
%c在输入输出的时候,是按照字符操作的。
%hhd是按照整数操作。
11、
getchar()函数会首先检查输入缓冲区,如果输入缓冲区为空,则会阻塞,直至输入字符。
前面一次输入可能会遗漏换行符,可以使用getchar();
取出垃圾。
12、
赋值抑制符:取走输入的值,但是不赋值给任何变量。
可以用复制抑制符进行垃圾回收:scanf("%d%*c", &a);
此时末尾的换行符就被取走了。
m可以限制宽度,如果输入是1234的整数,m为2,那么此时只会取前两位,即12
13、
使用 math.h 并且在用 gcc 时,需要在结尾加上 -lm
14、
sqrt(),求平方根
fabs(),求绝对值
pow(),幂
在使用格式化输出时,不能使用%d,返回值类型为double
15、
以e为底的log函数double log(double x)
以10为底的log函数double log10(double x)
16、
随机数生成函数头文件为stdlib.h
随机数发生器函数rand,函数原型int rand(void)
,返回0至int最大值之间的随机整数。
初始化随机数发生器函数srand,函数原型void srand(unsigned a)
,以给定数初始化随机数发生器。
srand(time(NULL));
rand();
// 以当前时间初始化随机数发生器,再产生一个随机数
可以通过取余的操作,将随机数控制在一个范围内
17、头文件#include <unistd.h>
unsigned sleep(unsigned seconds)
void usleep(int micro_seconds)
void exit (int a)
18、
++ 和 – 不能用于常量、表达式和函数返回值。
19、
类型转换包括隐式转换和强制转化。(为什么需要类型转换?便于硬件的实现)
隐式转换又分为运算转换、赋值转换、输出转换、函数调用转换
运算转换规则:不同类型数据运算时先自动转换成同一类型。char和short转为int,float转为double
赋值转换:同类型,有符号和无符号之间赋值,直接把等号左边的内存拷贝到等号右边的变量的内存里。长的赋给短的(截断),短的赋值给长的(若有符号位,将符号位移至最高)
输出转换:printf 把 char、short 提升到 int 型,float 提升到 double 再传给 printf
输出结果为ffffff82
,82的最高位为1,前面就全都补1,若为0,前面会都补0
强制类型转换:强制类型转换得到所需类型的中间变量,原变量类型不变。
20、
两个实数无法做到恒等于的判断。
可以通过以下方法判断:
21、
优先级为:非与或
22、
逻辑表达式的短路特性,逻辑表达式求解时,并非所有的逻辑运算符都被执行,只是在必须执行下一个逻辑运算符才能求出表达式的解时,才执行该运算符。
23、
24、