1.%d 十进制整数
%f 一个浮点数
%c 一个单一字符
scanf 读取标准输入的原理:
#define _CRT_SECURE_NO_WARNING
标准输入缓冲区:行缓冲
缓冲区为空时,scanf才会阻塞
%d%f会忽略空格
发生错误时返回EOF(#define EOF(-1))
ctrl+z 回车结束
rewind(stdin),fflush(stdin)清空缓冲区
空格 32 ascii
混合输入时每次在%c之前需要加入一个空格
printf控制输出格式:
%4.1f %3d(右对齐占3位) %-3d(左对齐占三位)
2.大写变小写+32
+48 数字变字符
等号左边必须是变量
~按位异或
当控制台卡住:①scanf输入(少输入内容可以输入)②死循环(不能输入)
while之后不能加分号,会死循环
数组在传递时,元素个数传递不过去
3.gets(c)可读取带空格字符串
//当一次读取一行时,使用gets();
puts(c)等价与printf("%s\n",c);
char c[20] 字符数组的数组名存的是字符数组的起始地址
c是一个字符数组,编译器给c存的是字符指针
strlen strcpy strcmp strcat
fgets(c,sizeof(c),sdtin);
fgets()相对于gets去读取标准输入时,会把\n放到字符数组中
可以把数组长度-1赋值为\0
4.
C函数调用时是值传递
数组是特殊的,不能和整型变量,浮点型,字符型变量类比
数组名 a类型是数组,a里面存的是地址值,数组的起始地址
内存分为三种权限:可读,可写,可执行
数组名作为实参传递给子函数时,是弱化为指针的;数组传递是弱化成指针的
malloc
void *p;
栈空间会随着函数的执行结束而释放
堆空间不会随子函数的结束而释放,必须自己free
不可以对常量区数据进行修改
二级指针的初始化一定是一个一级指针取地址
typedef使用:
起别名
typedef struct student{
int num;
char name[20];
}stu,*pstu;
pstu等价于struct student*
c++的引用:
把&写到形参的位置是C++的语法,称为引用