选择结构
通过优先级:算术运算符优先级高于关系运算符,关系运算符优先级高于逻辑与与逻辑或,相同优先级运算符从左至右进行结合
if语句
switch语句
循环结构
goto语句
while循环
do while循环
for循环
continue语句、break语句
数组
一维数组
先定义的变量放在高地址,后定义的变量在低地址
编译器并不检查程序对数组下标的引用是否在数组的合法范围,所以,如果下标值是从那些已知是正确的值计算得来,那么就无需检查。如果是从用户输入的数据产生而来的,那么在使用它之前必须进行检查,确保它们位于有效范围内
传递数组时,实际数组名里存的是数组的首地址,传递的是首地址,无法传递长度
使用栈空间(Windows为1M)时,不能使用过大数组(25万左右)
二维数组
传递时,列数一定要写
字符数组
C 语言规定字符串结束标志为’\0’,而系统对字符串常量自动加一个’\0’,为了保证处理方法一致,我们会人为的在字符数组添加’\0’,所以字符数组存储的字符串长度必须比字符数组小一个字节,比如,例如 char c[10]最长存储 9 个字符,剩余 1 个字符用来存储’\0’
gets、puts输入输出字符串
gets的%s模式是不安全的,因为没有传递长度,可以用char *fgets(char *str, int num, FILE *stream),长度不超过num-1,多余内容保留在缓冲区
字符串操作函数
#include<string.h>
size_t strlen(char *str); //统计字符串长度
char *strcpy(char *to, const char *from); //将字符串复制到另一个字符串中,目标数组一定要大于复制的
int strcmp(const char *str1, const char *str2); //比较两个字符串大小
char *strcat(char *str1, const char *str2); //将两个字符串连接到一起,目标数组大于连接后的字符串大小
char *strncpy(char *to, const char *from, size_t count); //将字符串 from 中至多 count 个字符复制到字符串 to 中。如果字符串 from 的长度小于 count,其余部分用'\0'填补
int strncmp(const char *str1, const char *str2, size_t count); //比较字符串 str1 和 str2 中至多 count 个字符,如果参数中任一字符串长度小于 count, 那么当比较到第一个空值结束符时,就结束处理
char *strncat(char *str1, const char *str2, size_t count); //将字符串 from 中至多 count 个字符连接到字符串 to 中
mem系列函数,可以对任何数组使用
void *memset(void *buffer, int ch, size_t count); //函数拷贝 ch 到 buffer 从头开始的 count 个字符里
void *memcpy(void *to, const void *from, size_t count); //函数从 from 中复制 count 个字符到 to 中,并返回 to 指针。to和from不能重叠
void *memmove(void *to, const void *from, size_t count); //与 mencpy 相同,to 和 from 可以重叠
int memcmp(const void *buffer1, const void *buffer2, size_t count); //比较 buffer1 和 buffer2 的前 count 个字符
sprintf将不同类型数据变为一个字符串
sscanf将字符串格式化为不同的数据类型并放入对应变量中