整型(int)
字符型(char)
实型(浮点型)
单精度型(float)
双精度型(double)
类型 | printf控制字符 | 类型说明符 | 字节 | 数字范围 |
---|---|---|---|---|
字符型 | %c %s | char | 1 | C字符集 |
基本整型 | %d %i | int | 4 | -214783648~-214783647 |
短整型 | %d %i | short int | 2 | -32768~32767 |
长整型 | %d %i | long int | 4 | -214783648~-214783647 |
无符号整型 | %u | unsigned int | 4 | 0~65535 |
无符号长整型 | %u | unsigned long | 4 | 0~4294967295 |
单精度实型 | %f %lf | float | 4 | 10-38~1038 |
双精度实型 | %F | double | 8 | 10-308~10-308 |
一维数组
1int test[10];
多维数组
xxxxxxxxxx
11int test[10][10];
字符数组
xxxxxxxxxx
11char test[10];
xxxxxxxxxx
31//声明变量
2int test;
3int test2 = 1145;
x1//注意:未指定的数据默认填充0
2int test[10];
3int test[] = { 1, 2, 3, 4, 5};
4
5//注意:以下b数组比a数组多 \0 作为结束
6char a[] = {'H', 'e', 'l', 'l', 'o'};
7char b[] = "Hello"
xxxxxxxxxx
21
2const int TEST = 1
xxxxxxxxxx
11int extern test = 1145;
xxxxxxxxxx
21register int test = 1;
2//速度更快的变量
xxxxxxxxxx
11+ - * / %
xxxxxxxxxx
41++test;//自增
2//先加后返回值
3test--;//自减
4//先返回后减值
xxxxxxxxxx
11== > >= < <= !=
xxxxxxxxxx
11&& || !
xxxxxxxxxx
61& | ~
2~ //异或
3<< //左移
4//高位溢出,不足补0
5>> //右移
6//低位溢出,正数补0,负数补1
if
循环xxxxxxxxxx
111// 用法
2if (条件表达式1){
3 要执行的语句1;
4}else if (条件表达式2) {
5 要执行的语句2;
6}else if (条件表达式3) {
7 要执行的语句3;
8}else{
9 // 都不满足
10 要执行的语句;
11}
switch
循环xxxxxxxxxx
131switch(表达式){
2 case 常量1:
3 // 如果表达式的值等于常量1,执行
4 break;
5 case 常量2:
6 // 如果表达式的值等于常量2,执行
7 break;
8 ......
9 default:
10 //都不满足执行
11 语句n+1;
12 //无需break;
13}
while
循环xxxxxxxxxx
41//先判断,后执行
2while (循环条件){
3 执行语句;
4}
do while
循环xxxxxxxxxx
41//先执行,后判断
2do{
3 执行语句;
4}while(条件);
for
循环xxxxxxxxxx
31for(变量初始值;循环条件;表达式){
2 执行语句;
3}
continue
执行下一次循环,需要判断循环条件
break
退出循环
return
跳出函数
goto
跳转语句
xxxxxxxxxx
71// 定义一个标签
2start:
3 if (i < 10) {
4 printf("%d ", i);
5 i++;
6 goto start; // 跳转到标签 start
7 }
不建议过多使用
xxxxxxxxxx
21
2
xxxxxxxxxx
51
2//将PI强制替换为3.1415926535
3
4
5//带参数的宏定义
注意:条件编译不能比较浮点数
xxxxxxxxxx
161
2int main(){
3
4 printf("PI已被宏定义\n");
5
6 printf("PI为3\n");
7
8 printf("PI为4\n");
9
10 printf("PI不为以上值\n");
11
12
13 printf("PI未被宏定义\n");
14
15 return 0;
16}
xxxxxxxxxx
71int max(int a, int b){
2 if(a >= b){
3 return a;
4 }else{
5 return b;
6 }
7}
xxxxxxxxxx
21& //取地址
2* //根据地址取值
xxxxxxxxxx
91//仅定义
2int* test;
3
4//取地址
5int a = 1145;
6int* test2 = &a;
7
8//指针变量的指针
9int** test3 = &test2;
xxxxxxxxxx
31int array[] = {1,2,3,4,5,6};
2int* pA = array; // 数组名就是数组的指针
3int* pB = &array[0]; // 数组的第一个元素的地址就是数组的指针
xxxxxxxxxx
61int a=1,b=2,c=3,d=4,e=5;
2int* Int[5] = {&a,&b,&c,&d,&e}; // 这是一个整型指针数组
3// 字符串在C语言中是字符数组,所以一个字符串相当于一个字符数组,字符串本身就等于字符数组的指针(首地址)
4const char* String[] = {"Test1","Test2","Test3","Test4","Test5"}; // 这是一个字符型的指针数组
5for (int i = 0; i < 5; ++i) {
6 printf("%p\n",String[i]); // 这里输出的就是每个字符串的指针
xxxxxxxxxx
131//声明
2struct Man{
3 char name[100];
4 int age;
5 double height;
6};
7
8//定义
9struct Man people1;
10//赋值
11people1.name = "LiHua";
12//调用
13printf("%s",people1.name);
结构体中的字符串的是地址
写在函数里面:局部位置
写在函数外面:全局位置
xxxxxxxxxx
131//声明同上
2......
3//定义
4struct Man people1 = {"LiHua",12,1.62};
5struct Man people2 = {"LiLing",18,1.73};
6struct Man people3 = {"LiPing",15,1.80};
7struct Man peopleArr[] = {people1,people2,people3};priojkljladf
8//调用
9printf("%s\n", people1.name);
10printf("%.2lf\n", peopleArr[1].height);
11//申请临时结构变量
12struct Man temp = peopleArr[2];
13printf("%d", temp.age);
typesef
起别名xxxxxxxxxx
171//声明
2typedef struct Man{ //Man可以省略
3 ......
4} M;
5
6//定义结构体变量
7M people1 ={"LiHua",12,1.62};
8M people2 = {"LiLing",18,1.73};
9M people3 = {"LiPing",15,1.80};
10//定义结构体数组
11M people[] = {people1, people2, people3};
12//调用
13printf("%s\n", people1.name);
14printf("%.2lf\n", peopleArr[1].height);
15//申请临时结构
16M temp = peopleArr[2];
17printf("%d", temp.age);