helloC
1. 字符串处理
1. gets(str)/puts(str)
2. fgets(str,len,stdin)/fputs(str,stdout)
3. strlen(str)
4. strcat(s1,s2)/strncat(s1,s2,n) //strcat无法检测s1是否能容纳s2,strncat加上n字节的限制
5. strcmp(s1,s2)strncmp(s1,s2,n) //只比较前n位
6. strcpy(s1,s2)/strncpy(s1,s2,n)
7. strchr(str,c)/strrchr(str,c) //在字符串中找字符位置,第二个是倒着找
8. strstr(s1,s2) //在字符串中找子串位置2. 存储类别、链接
1
auto 自动
块
无
块内默认
2
register 寄存器
块
无
变量前用关键字register
3
静态无链接
块
无
块内的static
4
静态内部链接
文件
内部
全局static
5
静态外部链接
文件
外部
全局变量,不加static
```
extern 说明 extern 只是变量声明,表明这个变量已经在其他文件中定义过了。 用extern声明的变量不能再定义。
auto 关键字 C 中的 auto 和C++ 中的完全不一样 C 中的是存储类别声明 C++ 中是自动类型
自动即放到栈上,静态即放到数据段,动态放到堆段
malloc(size)
calloc(n,size) 二者参数不同。且calloc初始化申请的空间为0,而malloc不初始化
relloc
free
const //常量限定,注意常量指针和指针常量
volatile //声明不能被编译器优化
restrict //只能用于指针,告诉编译器该指针是访问数据的唯一且初始的方式,可以被优化
_Atomic //原子操作限定,相当于资源锁了,但是只是可选实现,编译器不一定支持,不建议使用
注意struct成员是数组还是指针的问题 若是数组,存的是数组的大小 若是指针,存的是地址,地址指向其他地方,若要使用,记得用malloc
结构体的对齐问题
union 中多种类型只占一份空间,可用来判别大端小端
enum 枚举,为了增加程序的可读性,最好只使用,不要对其进行算术运算,不推荐使用
typedef只能用于类型
typedef由编译器解释,#define由预处理器处理
~:取反 & | ^ 与 或 异或
MASK=0x02 flags = flags & MASK 使用 MASK 中的 0 掩藏 flags 中的相应位
MASK=0x02 flags = flags | MASK 使用 MASK 中的 1 打开 flags 中的相应位
MASK=0x02 flags = flags & ~MASK 使用 MASK 中的 1取反后 关闭 flags 中的相应位
MASK=0x02 flags = flags ^ MASK flags中对应 MASK 中的 为1的位置的数全部改变,1变为0,0变为1
MASK=0x02 (flags & MASK)==MASK 检查 flags 中的某位或某几位是否为1
主要是在结构体中声明位大小 struct { int a:1; int b:1; } 本来应该占8字节,现在只占4字节,因为对齐原则,一个int至少4字节,但只使用了2位,其他的30位为0,不使用
最后更新于
这有帮助吗?