c基础很薄弱,仅限非计算机专业大学学的那点点基础。以后会每天更新个人的学习笔记。菜鸟的我是这样学下来滴。走过路过的,不许笑话。有缘看见的,欢迎指点。
函数名本身作为指针,指向函数代码首地址
函数体放在代码区
1.返回值为指针的函数成为指针函数
2.函数指针:指向函数的指针
函数声明类型一致,函数指针类型一致
void fun (char *b ); 函数指针为 void (*ptr)(char *);
赋值形式 ptr=fun;
3.调用函数:两种形式相同
fun();
ptr();
4.函数指针的应用
函数名不可以改变指向,指针可以改变指向
用函数指针调用函数必须写成函数形式
5.函数指针数组
int add(int ,int);
int sub(int ,int);
int mul(int ,int);
int (*ptr[])(int ,int)={add,sub,mul}; //此为函数指针数组
6.指针的传址调用
函数多个返回值--通过参数列表
int A(int *a,char *c,int x,double b)
7.递归函数
函数自己调用自己
递归函数在栈区,耗内存大
[栈区特点:先进后出,后进先出]
递归函数运行时,在栈区开辟一块内存,运行中所有结果包存在栈区,输出所有结果完成,释放所有内存
数据结构中 树 用递归函数比较多
构造类型
1.定义类型
struct student
{
int num;
char name[34];
int grade;
};
[相当于 int 可以用来定义变量]
2.定义变量
struct student stu1;
3.初始化
struct student stu1={1,"chains",34}
4.赋值
方法一stu1.num=1; strcpy(stu1.name,"abc"); [字符串不可以直接赋值,必须用字符串拷贝函数处理]
方法二stu3=stu2
5.结构体与指针的关系
struct student *p;
p=&stu1;
6.用指针取结构体内参数
方法一 (*p).num;(*p).name;
方法二 p->num; (常用)
7.在堆区创建结构体内存
struct student *ptr=malloc(sizeof(struct student)); //容易出错的地方,总是弄混数据类型 [!!!struct XXXX]
8.结构数组
struct student stu[3]={stu[0],stu[1],stu[2]};
stu=&stu[0];stu+1=&stu[1];
stu[1].name == (stu+1)->name
9.初始化
struct student stu[2]={{1,"name",45},{3,"chafde",64}}