1.递归函数
1.1作用:用来计算阶乘。
计算阶乘,使用递归函数进行调用。
#include<stdio.h>
int mul(int n)
{
if(n==1||n==0)
{
return 1;
}
else
{
return n*mul(n-1);
}
}
int main()
{
int n;
printf("请输入计算的阶乘:\n");
scanf("%d",&n);
printf("%d的阶乘是%d\n",n,mul(n));
return 0;
}
2.结构体
2.1定义:就是一类简单的数据类型的集合,凑成了结构体,也可以将结构体看做是一种数据类型。
2.2格式
基本框架
Struct AA
{
Char name[20];
Int age;
};
2.3访问
输入:scanf(“%s%d”,a.name,&a.age);
输出:printf(“%s%d”,a.name,a.age);
2.4&的使用场景
判断结构体里面用简单的数据类型定义的变量,是普通变量还是一个指针变量(指针常量)
结构体变量只是提供了一个访问结构体内部成员的方法,具体的输入是由结构体内部成员的输入方式决定的。
2.5普通方式
2.5.1定义结构体的同时定义结构体变量
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct aa
{
char name[20];
int age;
}p;
struct bb
{
int score;
struct aa b;
}q;
int main()
{
scanf("%s%d%d",q.b.name,&q.b.age,&q.score);
printf("%d\n",q.score);
printf("%s%d\n",q.b.name,q.b.age);
return 0;
}
2.5.2定义结构体,再定义结构体变量
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct aa
{
char name[20];
int age;
};
struct bb
{
int score;
struct aa b;
};
int main()
{ struct aa p;
struct bb q;
scanf("%s%d%d",q.b.name,&q.b.age,&q.score);
printf("%d\n",q.score);
printf("%s%d\n",q.b.name,q.b.age);
return 0;
}
2.5.3取别名
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef struct aa
{
char name[20];
int age;
}d;
typedef struct bb
{
int score;
struct aa b;
}f;
int main()
{ f p;
d q;
scanf("%s%d%d",q.b.name,&q.b.age,&q.score);
printf("%d\n",q.score);
printf("%s%d\n",q.b.name,q.b.age);
return 0;
}
2.6结构体指针(指向结构体变量的指针)
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct aa
{
char name[20];
int age;
}p;
struct bb
{
int score;
struct aa b;
}q;
int main()
{
struct bb *d=&q;
scanf("%s%d%d",d->b.name,&d->b.age,&d->score);
printf("%d\n",d->score);
printf("%s%d\n",d->b.name,d->b.age);
return 0;
}
2.7结构体嵌套
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct aa
{
char name[20];
int age;
}p;
struct bb
{
int score;
struct aa *b;
}q;
int main()
{
struct bb *d=&q;
d->b=&p;
scanf("%s%d%d",d->b->name,&d->b->age,&d->score);
printf("%d\n",d->score);
printf("%s%d\n",d->b->name,d->b->age);
return 0;
}
3.共用体
3.1格式
Union AA
{
Char name[20];
Int age;
Folat height;
};
3.2与结构体的区别
结构体:单独分配一片空间
共用体:共同使用一片空间
4.枚举
4.1作用:相当于给数字起别名。
5.字节对齐
5.1结构体规则:在64OS,一般最大按照8个字节为基准,在32OS,按照4个字节为基准,如果没有超过4各字节(8个字节),就按照结构体内最大的那个数据类型去分配,并且采用查漏补缺。
5.2共用体规则:共用同一片空间(最大的那一片空间)。
6.函数指针
6.1格式:数据类型 * = &变量名 (普通变量)
6.2数据类型:int (int ,int )
6.3推导:Int (*p)(int ,int) = &add;------>p = &add;
6.4 函数名是函数的入口地址:Int (*p)(int ,int) = add;--------->p = add;
7.make
7.1定义:make是一个工程管理器,用来管理多文件联合编译的,将不同的.c(有某种关系)文件编译成一个可执行文件。
7.2处理步骤:预处理,编译,汇编,链接。
7.3写法:目标:依赖;[tab]关系表
7.4规则:Make会根据时间戳管理文件。
7.5多文件makefile的流程
7.51:把子函数单独拆开放到.c文件,然后主函数放到一个.c文件里面
7.52:自定义头文件
以stdio.h为例
#include <stdio.h> 代表的是系统的头文件,去/usr/include寻找需要的头文件
#include “stdio.h” 代表的是用户自定义的头文件,去用户工作的路径下寻找
7.53:定义头文件 (test.h)
注意:头文件名字与定义文件名一致
#ifndef _TEST_H_
#define _TEST_H_
//防止头文件被重复定义
1.头文件(库函数的头文件)
2.结构体/共用体
3.宏定义
4.枚举
5.子函数的声明
#endif
7.54:Makefile(只需要在里面写上可执行文件,.o, .c文件三个之间的关系)
7.6makefile嵌套
7.61:Src:makefile
7.62:bin
7.63:执行
8.系统预定义变量实现makefile