一,格式化IO的函数:
都会有存在IO缓冲区(printf和scanf的输入输出都需要经过IO缓冲区)
printf:
#include <stdio.h>
int printf(const char *format, ...);
1,printf这个函数是一个变参函数(指的是参数个数不固定),
后面的参数个数及格式由前面的format这个字符串格式去指定;
2,printf这个函数并不会马上将内容打印出来,
而是需要遇到以下这些场景才能将输出:
A,printf的输出内容填满了IO缓冲区
B,遇到换行符"\n"
C,程序正常退出(main函数结束的时候)
3, printf这个函数由于是个变参函数,他在内部调用参数值的时候是从后到前调用的
而且printf函数调用的时候很容易被优化
4,printf中format里面的各个格式
%d:打印十进制有符号int
%hd: short
%hhd: char的数字
%u:unsigned int
%o: 打印八进制数
%x: 打印十六进制
%ld: long int
%lld or %Ld : long long int
%lu: unsigned long int
%c: char
%s: 字符串
%f: float
%lf: double
%Lf:long double
%.3f:打印小数点后三位
%p :打印指针的地址
%e:科学技术法打印
%%:打印%
二,格式化输出函数
sprintf:组合字符串往指定的内存输出:
int sprintf(char *str, const char *format, ...);
str:指定的内存(以后打印的内存将会存放到这片内存中)
format:参照printf函数
...:参照printf函数
snprintf:组合指定大小的字符串
int snprintf(char *str, size_t size, const char *format, ...);
str:指定的内存
size:指定多大(包含'\0')
format等参照printf函数
三,scanf:
#include <stdio.h>
int scanf(const char *format, ...);
1,后面的参数必须得是前面format指定的格式的内存的地址
2, scanf的返回值代表成功获取到多少个数据
3, 如果获取失败,这个异常的数据将会一直存在在IO缓冲区中
4,这个函数会阻塞
四,sscanf:
从指定的内存当中获取数据
int sscanf(const char *str, const char *format, ...);
str:指定的内存
format:参照scanf
五,运算符
算数运算:
+, - , *, /, %, --, ++
1, -:可以当做一目取负(负负得正)
2,a++,++a的区别:
a++经过两个步骤
a先拿来用,用完之后再加1
++a则是a先加1,然后再拿这个值来用
六,关系运算:
>,< >=, <= !=, ==
这些关系运算一般作用于条件判断当中,如果符合则是返回真(1),
如果不符合,则是返回假(0)
七,逻辑运算:
!:逻辑取非,假变成真,真变成假
&&:并且,要求两个条件都为真则是真,
只要有一个条件是假则下面的判断都不会再执行,直接返回假
||:或者,要求两个条件中只要有一个为真,则立即返回真,不会再往下面判断
八,位运算:
&:位运算的与操作
|:位运算的或操作
~:位运算的取反操作
^:位异或,相同得0,不同得1
>>:右移
<<:左移
&a:取地址操作
a&&b:逻辑判断,两个条件都得为真才能返回真
a&b:位运算(通过二进制的与得出运算结果)
九,三目运算:
条件 ? 为真的返回值 : 为假的返回值;
十,逗号表达式:
指的是在单个语句当中允许用逗号隔开来,进行多个语句从左到右的运算,
其中最后的这整条表达式的返回值是逗号表达式当中最后的那个值决定
十一,sizeof:测量指定内容的大小(以字节为单位)
sizeof(a); //4
sizeof(array); //10
sizeof("hello");//6
sizeof(int); //4
sizeof(p); //侧量指针的时候返回的只是指针变量的大小
(就是系统的位数)
(不会进去这个地址里面去侧量里面的内容的大小)