1、gets()函数总结
(1)gets() 从标准输入设备读取字符串,以回车结束读取,使用'\0'结尾,回车符'\n'被舍弃没有遗留在缓冲区。
(2)可以用来输入带空格的字符串。
(3)可以无限读取,不会判断上限,因此使用gets不安全,可能会造成溢出
2、四舍五入输出
float f = …..; int i = (int)(f + 0.5);
i就是f四舍五入的结果
3、assert()断言函数,用于在调试过程中捕捉程序错误
使用assert()函数需要引用头文件:#include <assert.h>
assert() 会对表达式expression
进行检测:
“断言”在语文中的意思是“断定”、“十分肯定地说”,在编程中是指对某种假设条件进行检测,如果条件成立就不进行任何操作,如果条件不成立就捕捉到这种错误,并打印出错误信息,终止程序执行。
- 如果
expression
的结果为 0(条件不成立),那么断言失败,表明程序出错,assert() 会向标准输出设备(一般是显示器)打印一条错误信息,并调用 abort() 函数终止程序的执行。 - 如果
expression
的结果为非 0(条件成立),那么断言成功,表明程序正确,assert() 不进行任何操作。
4、多组输入输出
...
一:while (scanf("%d",&n)!=EOF)
二:while (~scanf("%d",&n))
...
5、const用法
const 修饰变量
const 修饰指针
int main()
{
const int n = 10;
//n = 20;
//const 修饰指针
//const 放在*的左边
//const修饰的指针指向的内容,表示指针指向的内容不能通过指针来改变
//但是指针变量本身是可以改变的
//
//const 放在*的右边
//const修饰的是指针变量本身,指针变量的内容不能被修改
//但是指针指向的内容是可以通过指针来改变的
int m = 100;
int* const p = &n;
//p = &m;
*p = 20;
printf("n=%d\n", n);
return 0;
}
6、strlen与sizeof
strlen是一个库函数,计算的是字符串的的长度,并且只能针对字符串,关注的是字符串中是否有'\0',计算的是'\0'之前的字符个数
sizeof是一个操作数(运算符),sizeof是用来计算变量所占内存大小的,任何类型都是可以使用,只关注空间大小,不在乎内存中是否存在'\0'
7、sizeof内部表达式注意事项
sizeof内部的表达式并不会去真实计算
如:short s = 20; sizeof(s=a+4)——>sizeof(short)
sizeof并不计算里面的a+4,而是计算s的数据类型,为2,因为short数据类型为2个字节大小
8、大小端字节序
大小端字节序:是指以字节为单位的数据的存储方式(该数据大小需大于1字节)
大端(存储)模式,是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址 中;
小端(存储)模式,是指数据的低位保存在内存的低地址中,而数据的高位,,保存在内存的高地 址中。
9、整型提升
char short类型的数据在参与表达式计算时(+ - * / % 等)会发生整形提升,因为整形数据在内存中是以补码的形式参与存储与计算,若定义的数据类型小于int型,在其计算时会把这个数据整形提升为int型去计算。
整型提升是按照变量的数据类型的符号位来提升的,无符号数整型提升是往高位补0
10、算数转换
int long long long float double
以上多种类型数据(>=int类型)参与表达式计算会发生算数转换,是往高字节类型转换
11、无符号整数注意事项
无符号整数做循环变量时,若超出范围可能会造成死循环
12、数组名是首元素的地址,但有两个例外
1、sizeof(数组名),这里的数组名是表示整个数组的,sizeof(数组名)计算的是整个数组的大小,单位是字节
2、&数组名,这里的数组名不是首元素的地址,数组名表示整个数组,所以取出的是整个数组的地址
13、Visual Studio 2019快速更改所有变量名
1.用鼠标选中其中一个想要更改的变量名称(如count);
2.选中更改的变量名称(如count),按下键盘组合键Ctrl+C,再按Ctrl+F;
3.展开的替换框中填写想要更改的名称count-->sum,并单击第二个全替换AIT+ All按钮