家庭宽带做私人网站,钦北区网站建设,网站这么建设,网页设计实训总结800字目录
编辑
指针函数
本质
格式#xff1a;
函数指针
1、 概念
2、 格式
3、 举例
3.1基本用法
3.2函数指针作为函数参数的用法(回调函数)
函数指针数组
1. 概念
2. 格式
3. 例子 指针函数
本质
是函数#xff0c;返回值为指针
格式#xff1a;
数据类型…
目录
编辑
指针函数
本质
格式
函数指针
1、 概念
2、 格式
3、 举例
3.1基本用法
3.2函数指针作为函数参数的用法(回调函数)
函数指针数组
1. 概念
2. 格式
3. 例子 指针函数
本质
是函数返回值为指针
格式
数据类型 *函数名(形参列表)
{
函数体
return 指针/地址 //return NULL; 一般表示返回失败的情况
}
实例
char *fun()
{//buf是局部的,函数调用结束空间释放自己写程序时不可以这样写//char buf[32] hello; //想要实现在函数外能拿到hello字符串方式如下//方式一:char *buf hello; //hello存在常量区//方式二:char *buf (char *)malloc(32); //在堆区开辟空间strcpy(buf, hello);return buf;
}
int main(int argc, char const *argv[])
{char *p fun();printf(%s\n, p); free(p);p NULL; return 0;
}
思考封装一个函数获取堆区空间的首地址。
//方式一通过函数的返回值拿到堆区空间首地址
// char *getmemory(int n)
// {
// char *p (char *)malloc(n); //成功:首地址,失败:NULL
// if(p NULL)
// return NULL;
// return p;
// }
//方式二通过函数参数拿到堆区空间首地址
void getmemory(char **p, int n)
{*p (char *)malloc(n);
}
int main(int argc, char const *argv[])
{// char *m getmemory(32);char *m NULL;getmemory(m, 32);strcpy(m, helloworld);printf(%s\n, m);return 0;
} 函数指针
1、 概念
本质是指针指针指向函数的指针
2、 格式
数据类型 (*指针名)(形参列表) 数据类型指向的函数的返回值类型
形参列表和指向的函数的参数一致此处形参列表可以只保留数据类型变量名可以省略如int (*p)(int, int);
3、 举例
3.1基本用法
int add(int a, int b)
{return ab;
}
int sub(int a, int b)
{return b-a;
}
int main(int argc, char const *argv[])
{//函数指针int (*p)(int, int) add; //函数名代表函数的入口地址p sub; //改变指针的指向,指向sub函数printf(%d\n, add(3, 4));printf(%d\n, p(3, 4));return 0;
}
3.2函数指针作为函数参数的用法(回调函数)
int sub(int a, int b)
{ return b-a;
}
int add(int a, int b)
{ return ab;
}
//函数指针作为函数参数
int test(int a, int bint (*p)(int, int))
{return abp(1, 3);
}
int main(int argc, char const *argv[])
{ //可以给test函数传递不同的函数实现代码的复用printf(%d\n, test(10, 20, add));printf(%d\n, test(10, 20, sub));return 0;
}
注意后面学习中常见的使用流程
系统给提供包含函数指针的函数接口用户调用此函数并自定义函数给函数指针传参 函数指针数组
1. 概念
本质是数组数组中存放函数指针指向函数的指针
2. 格式
数据类型 (*数组名[元素个数])(形参列表);
如int (*arr[3])(int, int) {函数名};
3. 例子
int add(int a, int b)
{return ab;
}
int sub(int a, int b)
{return a-b;
}
int mul(int a, int b)
{return a*b;
}
int main(int argc, char const *argv[])
{//函数指针数组1. // 定义时赋初值int (*arr[3])(int, int) {add, sub, mul};2. // 定义时未赋初值需要单个元素赋值int (*arr[3])(int, int);arr[0] add;arr[1] sub;arr[2] mul;for(int i 0; i 3; i)printf(%d\n, arr[i](3, 4));return 0;
}
练习
1. 用变量a表示下面定义
a) 一个整型数
b)一个指向整型数的指针
c)一个指向指针的的指针它指向的指针是指向一个整型数
d)一个有10个整型数的数组
e) 一个有10个指针的数组该指针是指向一个整型数的。
f) 一个指向有10个整型数数组的指针
g) 一个指向函数的指针该函数有一个整型参数并返回一个整型数
h)一个有10个指针的数组该指针指向一个函数该函数有一个整型参数并返回一个整型数