汇编器 汇编语言 编译器 C语言 面向过程 解释器 Shell
变量
extern修饰
static修饰
函数
内部函数/静态函数
使用static修饰函数
外部函数
使用extern修饰函数
数据类型
基本数据类型 int float double char 基本数据类型修饰符 short 短型 long 长型 signed 有符号型 unsigned 无符号型 指针类型 void* 构造类型 数组 struct union enum 空类型 void
[tr]x16-bit编译器32-bit编译器64-bit编译器[/tr]char 1 1 1 void * 2 4 8 short int 2 2 2 unsigned int 2 4 4 int 2 4 4 float 4 4 4 double 8 8 8 long 4 4 8 unsigned long 4 4 8 long long 8 8 8
循环语句 do-while while for 条件语句 if if-else switch goto语句 空语句
运算符
算术运算符
+ - * / % ++ –
关系运算符
== != > < >= <=
在C语言中关系运算的结果为’真’返回1,为’假’返回0.
在C语言中任何非0值都为’真’,只有0值才为’假’.
在Java语言中关系运算的结果为’真’返回true,为’假’返回false.
赋值运算符
= += -= *= /= %= <<= >>= &= |= ^=
逻辑运算符
&& || !
在C语言中逻辑运算的结果为’真’返回1,为’假’返回0
按位运算符
& | ^ ~ << >>
其他运算符
sizeof()
? :
,
.与->
Cast
&
*
优先级
! > 算术运算符 > 关系运算符 > && > || > 赋值运算符
[tr]格式符功能[/tr]%d 以带符号的十进制形式输出整数(但正数不输出正号+) %o 以不带符号的八进制形式输出整数 %x 以不带符号的十六进制形式输出整数 %u 以不带符号的十进制形式输出整数 %c 输出一个字符 %s 输出一个或多个字符 %f 以小数形式输出单、双精度数,默认输出6位小数 %e 以标准指数形式输出单、双精度数,数字部分小数位数为6位
printf("Hello,World")
printf("count is %d", 26)
printf("life is %d", 12);life is 12
printf("life is %4d", 12);life is 12
printf("life is %-4d", 12);life is 12
printf("life is %f", 12.232);life is 12.232000
printf("life is %.2f", 12.23521);life is 12.24
printf("life is %8.2f", 12.23521);life is 12.24
printf("life is %8.2f", 175352932.23521);life is 175352932.25
数组
数组名是个常量,代表着数组的地址,也就是数组的起始地址.
C语言中编译器不会对数组下标越界进行检查
一维数组
二维数组
初始化时行数可以省略
初始化时列数不可省略
字符串
字符串输出函数printf
char arr[3] = {'m', 'j', '\0'};
printf("%s", arr);
字符串输出函数puts
char arr[] = "python";
puts(arr);// 从arr首地址开始输出字符,直到\0字符为止.
puts函数输出一个字符串后会自动换行
puts函数一次只能输出一个字符串,printf函数则可以同时输出多个字符串
字符串输入函数scanf
char arr[10];
scanf("%s", arr);// 从arr的首地址开始存放用户输入的字符,存放完毕后,系统会自动在尾部加上一个结束标记\0
字符串输入函数gets
char arr[10];
gets(arr);// 从arr的首地址开始存放用户输入的字符,存放完毕后,系统会自动在尾部加上一个结束标记\0
gets一次只能读取一个字符串,scanf则可以同时读取多个字符串.
gets可以读入包含空格、tab的字符串,直到遇到回车为止. scanf不能用来读入空格、tab.
//输出大写字母A
putchar(65)
//输出大写字母A
putchar(‘A’)
//输出大写字母A
int i = 65;
putchar(i);
// putchar一次只能输出一个字符,而printf可以同时输出多个字符.
printf("%c %c %c", 'A', 'B', 'a');
// 将用户输入的字符赋值给变量c
char c;
c = getchar();
/*
getchar可以读入空格、tab,直到遇到回车为止. scanf则不能读入空格和tab.
getchar一次只能读入一个字符, scanf则可以同时接收多个字符.
getchar可以读入回车换行符,这时候需要敲2次回车键. 第1次敲的回车换行符被getchar读入,第2次敲的回车键代表输入结束.
*/
/*
strlen计算字符串中字符个数,不包括\0
*/
// 长度2
int size = strlen("mj");
// 长度3
char s1[] = "lmj";
int size1 = strlen(s1);
// 长度2
char s2[] = {'m', 'j', '\0', 'l', 'm', 'j', '\0'};
int size2 = strlen(s2);
// 字符串dest内容是mj
char dest[10];
char src[] = {'m', 'j', '\0', 'l', 'm', 'j', '\0'};
strcpy(dest, src);
// 字符串dest内容是LOVEOC
char dest[30] = "LOVE";
strcat(dest, "OC");
// 字符串dest内容是LmjOC
char dest[30] = {'L', 'm', 'j', '\0', 'L', 'o', 'v', 'e', '\0'};
strcat(dest, "OC");
/*
strcmp比较字符串大小
strcmp(s1,s2)
1.两个字符串从左至右逐个字符比较(按照字符的ASCII码值的大小),直到字符不相同或者遇见'\0'为止.
2.如果全部字符都相同则返回值为0
3.如果不相同,则返回两个字符串中第一个不相同的字符ASCII码值的差值.即s1大于s2时函数返回值为正值,否则为负值.
*/
结构体
// 结构体与结构体变量的定义
struct Student {
char *name;
int age;
};
struct Student stu;
struct Student {
char *name;
int age;
} stu;
struct {
char *name;
int age;
} stu;
// 结构体变量初始化
struct Student {
char *name;
int age;
};
struct Student stu = {"Tom","27"};
struct Student {
char *name;
int age;
};
struct Student stu;
stu.age = 27;
// 结构体数组
struct Student {
char *name;
int age;
};
struct Student stu[3];
struct Student {
char *name;
int age;
} stu[3];
struct {
char *name;
int age;
} stu[3];
// 结构体数组初始化
struct {
char *name;
int age;
} stu[2] = {{"python",3},{"Java",12}};
预处理指令
#include <>//直接到C语言库函数头文件所在的目录中寻找文件.
#include ""//先在源程序当前目录下寻找; 若找不到再到系统的PATH路径下寻找; 最后才到C语言库函数头文件所在的目录中寻找文件.
条件编译
// 判断宏定义
#if PI==0
…
#elif PI>0
…
#else
…
#endif
// 判断是否定义宏PI
#if defined(PI)
…
#endif
// 判断是否定义宏PI
#if !defined(PI)
…
#endif
// 判断是否定义宏PI
#ifdef PI
…
#endif
// 判断是否定义宏PI
#ifndef PI
…
#endif
个人网站