type
status
date
slug
summary
tags
category
icon
password
捡起大一还是大二时学的C语言,不过是在Linux上实现的进阶版。在B站上发现了相关的宝藏视频,有点基础才能看懂,很符合我的口味。
📝 一、学习内容
(一)快捷操作
命令 | 意义 |
gcc hello.c -Wall | 报所有warning |
#if 0 #endif | 注释 |
(二)知识点摘要
数据类型
- char型不知道是否有符号
- float类型:if(fabs(f-0) <= 1e-6)来表示f=0
常量与变量
- 字符常量:‘’,字符串常量:”“
- 标识常量:在程序预处理阶段,占编译时间,一改全改,不检查语法(注意加括号)。#define MAX(a,b) ((a) > (b) ? (a) : (b)),当a++,b++时慎用,最大的值一定会自增两次。但宏节省运行时间(但函数更稳定)。替代:#define MAX(a,b) ({typeof(a) A=a,B=b; ((A) > (B) ? (A) : (B));})
- 变量定义:[存储类型] 数据类型 标识符 = 值:TYPE NAME = VLUE。存储类型:auto(默认)、static(静态型)、register(建议型)、extern(说明型)。用static修饰全局变量或函数时,只在当前.c文件有效。
运算符和表达式
- 非0(-1)即为”真“。
- C不支持二进制写法
- 将操作数中第n位清0,其它位不变:num=num&~(1<<n)
输入输出
- 格式化IO函数:scanf、printf。
scanf最好判断一下输入的数据类型是否对:
用scanf抑制符*;或用getchar();吃掉中间空格或换行键。
- 字符IO函数:getchar和putchar(无换行功能)
- 字符串IO函数:gets(危险)和puts,gets—>fgets(char *s,int size,FILE *stream)只能读size-1个(治标不治本)或getline
流程控制语句(顺序、选择、循环)
- 选择if-else语句 else只与最近的if相匹配
- 选择switch-case语句 (1) 不能忽略default (2) case必须接常量或常量表达式(变量不行)
- 循环while语句
- 循环do-while语句 至少循环一次
- 循环for语句 三个条件都可以为空
- 循环if-goto语句 (慎重使用)goto实现的是无条件的跳转,且不能跨函数跳转
- 死循环while(1);和for(;;);
- 辅助控制:break、continue
数组(一维、二维、字符)
- for(j=2*i;j<1001;j+=i)的意义是j=n*i
- 二维数组可以省略行号,不能只省略列号,如a[][N]
- 字符数组:strlen是以\0为结束,而sizeof是字符串真正大小 strcpy和strncopy、strcat和strncat、strcmp和strncmp
- 在C语言中通过混合
char *str = "blah"
和char str[] = {'b','l','a','h'}
语法构建二维数组来构建字符串数组。而char *states[] = {...}
语法就是这样的二维混合结构,其中每个字符串都是数组的一个元素,字符串的每个字符又是字符串的一个元素。
指针
- 指针就是地址(常量),不同于指针变量
- const修饰常量或常量指针(const int *p)。不同于指针常量(int * const p)
- 数组指针(int (*p)[3])。指针数组(int * arr[3])
函数
- 函数的传参:值传递、地址传递和全局变量
- 指针函数(int * fun(int))、函数指针(int (*p)(int, int))、函数指针数组(int (*arr[2])(int,int))、指向指针函数的函数指针数组(int *(*funcp[N])(int))
构造类型
- 结构体(struct)、共用体(union)、枚举类型(enum)
C++
- class默认权限是私有,struct默认权限是公共
- 作者:Sherilyn
- 链接:https://notion-next-green-nine-96.vercel.app//article/2024/05/06/a5d7eef6-551f-441e-ae7f-5f80b38e55b5
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。