C语言简单笔记
一格式控制符整数short、int、long、long long 格式控制符%hd %d %ld %lld实型带小数点float、double 格式控制符%f %lf字符char格式控制符%c是字符%s是字符串二常用函数stdio.hprintf()将数据输出到屏幕上scanf()读取键盘输入的数据const定义只读变量const int number10;time.htime()获取当前时间stdlib.hsrand()设置随机数生成器的种子rand():生成一个随机数如果种子srand不设置则每次生成同一个数三基础知识①float 输入f 输出%f或%edouble 输入lf 输出%f或%eeg:1E-10 E:1.0000E-10 f:0.000000(表示1*10^-10)sizeof求所占数据大小单位②计算机内二进制数字是闭环的 1→1271271-128-128→0二进制表示负是 将该数取反后加1 eg-50000 0101取反1111 101011111 1011-5③printf输出inf表示超过范围的浮点数±∞printf输出nan表示不存在的浮点数浮点数带 f 表示他是浮点数否则是doublea1.234 表示是float整数没特殊需要建议用int浮点数则是double④字符类型char c;scanf(%c,c); 1printf(%d,c); 49printf(%c,c); 1 对应ASCLL的编码是 49⑤逃逸字符\b回退一格 \t到下一个表格位\n换到下一行 \r回车\双引号 \单引号\\反斜杠本身⑥类型转换当运算符两边出现不一致的类型时会自动转换成较大的类型char→short→int→long→long longint→float→double对于printf任何小于int的类型会被转化成intfloat会被转化成doublescanf不回要输入short时需要%hd⑦布尔类型 bool#incldestdbool.h之后可以使用 bool、true、falseboo btrue65b2printf(“b%d\n”,b) b1⑧逻辑运算符与 或 || 非 优先级||关系运算符逻辑运算符⑨条件运算符优先级高于赋值运算符低于其他count(count20)?count-10:count10成立count-10 不成立count10⑩逗号运算符优先级最低egi34,56 i7i(36,56) i11函数1.定义函数void sum(int begin,int end)//定义sum{int f10;int sum0;for(f1begin; f1end; f1){sumf1;}printf(%d到%d的和是%d,begin,end,sum);}int main(){sum(1,10);//调用定义的函数sumreturn 0;}2.返回值return停止函数执行将值送回return;return 表达式;void函数不能使用带值的return也可以没有return。如果函数有返回值必须用return。3.函数声明提前告诉编译器函数的类型后面定义的时候可以放在main后面void sum(int int );//声明 函数原型。可以写入 ab也可以不写入int main(){}void sum(int aint b)//定义{}4.传递函数当调用函数时给的值与参数值不匹配时编译器会自动转换类型很可能造成不是期望值。调用函数时永远只能传递值给函数。void swap(int a,int b){int tb;ba;at;}int main(){int a5;int b6;swap (a,b);printf(%d %d,a,b); 依旧是5 6不会发生改变 调用函数只传递值不做 其他事}5.数组类型➕数组名称➕[]数组初始化int count[10]{0};//全部设置为06.运算符①获取变量地址它的操作数必须是变量printf%p,i %p输出地址7.格式符整型%d, %ld, %lld %u(十进制无符号整数) %lu浮点型%f %lf十六进制%x 无符号八进制%o字符%c 字符串%s地址/指针:%p指针指针变量的值是具有实际值的变量的地址int *pi p是指针变量*表示类型*是一个单目运算符用来访问指针的值所表示的地址上的变量定义了*p后后续调用P代表指针本身即地址p(ac[0]); p1(ac[1]); p(ac[2])*p:代表指针指向的值的本身*pi; *pac[0]遍历While(*p){p}//const在前只改指向*在前只改值//const在*前 可以改变指针指向不能通过指针修改值//eg *p126int a10,b20;int const*pa;//*p 30 不能通过pb;//p20// *在const前 不能修改指针指向但可以通过指针修改值int *const qa*q30// q b 不能通过//int a[]{0,1,2,3,4,5,6,7,8,9,}//int *pa;//*(p1)a[1];指针计算给一个指针加、减--递增递减--两个指针相减· malloc向系统申请一块指定大小的内存返回这块内存的地址若失败则返回 NULL。· free将 malloc 申请的内存归还给系统避免内存泄漏。malloc借空间free 还空间字符串\0标志字符串结束char str[5]{‘H’, ’e’, ’l’ ,’l’, ’o’}; printf: 输出乱码会继续打印直到碰到随机的0char str[5]{‘H’, ’e’, ’l’ ,’l’, ’o’, ‘/0’}; printf: Hello存放创建、储存、修改字符串→数组遍历、查找、传递、操作字符串→指针传递函数指针动态内存分配scanf安全输入scanf(“%7s”,word) s前加有效个数字符串数组char **a: a是一个指针指向另外一个指针另外一个指针指向一个字符串char a[][]: 第一个[]是数组个数 第二个[]是每个数组长度char *a[]: 代表指针数组putchar(int c):向标准输出写一个字符返回洗了几个字符EOF(-1)表示失败Getchar(int):从标准输入读入一个字符返回类型是int是为了返回EOF(-1)强制程序结束Ctrl—C发送EOF表示输入结束Windows→Ctrl-ZUnix→Ctrl-Dincludestring.hstrlen: size_t strlen(const char *s) 返回s的字符串长度(不包括结尾的0)strcmp: int strcmp(const char *s1,const char *s2);比较两个字符串返回0、1或-1( ; ; )strcpy: char *strcpy(restric dst, const char *restric src); 把src的字符拷贝到dst。restric表明src和dst不重叠。 返回dst为了能链起代码来。strchr: char *strchr(const char *s, int c); 字符串中找字符从左边开始找寻找c第一次出现的位置返回值NULL表示没找到strrchr:char *strrchr(const char *s,int c); 从右边开始找strstrchar *strstr(const char *s1,const char *s2); 字符串中找字符串strcasestrchar *strcasestr(const char *s1,const char *s2); 忽略大小写fgets: char *fgets(char *str,int size, FILE *stream) fgets(in,3,stdin);in:存放地址3长度stdin:表示键盘输入strcspn:strcspn(const char *str,const char *reject);返回第一个匹配到的字符的索引eg char str[] “hello world”Int pos strcspn(str,” ”);printf(“%d”,pos); 输出为5因为” ”第五位后是空格includestdlib.hmalloc: p (int *)malloc(sizeof(int)); 用于在程序运行时动态分配内存与Int a[]这种固定大小的数组不同malloc可以在运行时根据实际需求来决定分配多少内存需要释放内存 free(p)(int *):强制类型转换把返回值地址改成int *malloc ( ):向系统申请一块内存多少自己填sizeof(int):计算int类型占多少字节枚举enum 枚举类型名字{名字0名字1……名字n}作用用有意义的单词代替无意义的数字 color 1 ;enum color {red,yellow,green}color red;