当前位置: 首页 > wzjs >正文

广州企业网站建设公司手机网页设计制作网站

广州企业网站建设公司,手机网页设计制作网站,html简单网页代码课程表,网站建设和维护前言 🎈个人主页:🎈 :✨✨✨初阶牛✨✨✨ 🐻推荐专栏: 🍔🍟🌯 c语言进阶 🔑个人信条: 🌵知行合一 🍉本篇简介:>:介绍c语言中有关指针更深层的知识. 金句分享: ✨在该…

在这里插入图片描述

前言

🎈个人主页:🎈 :✨✨✨初阶牛✨✨✨
🐻推荐专栏: 🍔🍟🌯 c语言进阶
🔑个人信条: 🌵知行合一
🍉本篇简介:>:介绍c语言中有关指针更深层的知识.
金句分享:

✨在该奋斗的岁月里,✨
✨对得起每一寸光阴.✨

目录

  • 前言
  • 一、函数指针
    • 1.1 函数指针的创建
    • 1.2 函数指针应用
  • 二、函数指针数组
  • 三、函数指针数组指针
  • 四、回调函数

一、函数指针

1.1 函数指针的创建

函数指针,顾名思义,就一个指向函数的指针.
那么

整形指针是接收整形的地址;
字符指针是接收字符的地址.
数组指针是接收数组的地址

函数有地址吗?函数名又可以代表什么?
示例:自定义一个加法函数,观察函数的地址

//函数指针
#include <stdio.h>
int add(int a,int b)//自定义一个加法函数
{return a + b;
}
int main()
{int a = 2, b = 3;int c=add(a, b);printf("%d\n", c);//确认一下函数是否正确printf("%p\n", &add);//取出函数的地址printf("%p\n", add);//用数组名打印return 0;
}

运行结果:(在不同环境下地址会不一样,这里采用的是vs x86环境)

5
00E61023
00E61023

不难发现,函数名也可以代表函数的地址.
那么函数指针该怎么写呢?

数组指针为例:
数组指针示例:写一个指向 int arr[10] 数组的数组指针;

第一步:
(*p)		//先确定是一个指针
第二步:
(*p)[10]	//确定指向的是一个有10个元素的数组
第三步:
int(*p)[10]	//确定该数组元素为int型
第四步:
int(*p)[10]=&arr;//将数组的地址赋值给数组指针
//或者int(*p)[10]=arr;

示例2:
函数指针:指向int add(int a,int b)

第一步:
(*p)			//先确定是一个指针
第二步:
(*p)(int,int)	//确定指向的函数有两个参数
第三步:
int (*p)(int,int)	//确定该函数的返回类型
第四步:
int (*p)(int,int)=&add;//将函数的地址赋值给函数指针
//等价于:int (*p)(int,int)=add;

1.2 函数指针应用

那么函数指针有什么用吗?
当然是用来调用函数了.
同样以数组指针为例:
🌰使用数组指针访问数组.

int main()
{int arr[10] = { 1,2,3,4,5 };int(*p)[10] = arr;for (int i = 0; i < 5; i++){printf("%d ", ( * p)[i]);}printf("\n");return 0;
}

🌰使用函数指针调用函数

#include <stdio.h>
int add(int a,int b)
{return a + b;
}
int main()
{int a = 2, b = 3;int(*p1)(int, int) = &add;int(*p2)(int, int) = add;int ret1=add(a,b);int ret2=(*p1)(a, b);//写法一int ret3=p1(a, b);//写法2printf("ret1=%d\nret2=%d\nret3=%d",ret1,ret2,ret3);return 0;
}

运行结果:都能完成函数的调用

ret1=5
ret2=5
ret3=5

二、函数指针数组

函数指针数组实质用于存放函数指针数组.
数组的成员都是函数指针.
写法:以数组成员都是指向类似int add(int,int)的函数指针为例

1.先写出函数指针
(int) (*p)(int,int)
2.改成数组
(int) (*p[10])(int,int)//函数指针数组

题目:使用c语言制作简单的计算器.
要求,可以进行加减乘除运算.

//简易计算器
#include <stdio.h>
void menu()//菜单
{printf("作者:初阶牛\n");printf("	欢迎使用计算器:\n");printf("+-------------------------------+\n");printf("|	1.add		2.sub	|\n");printf("|	3.mul		4.div	|\n");printf("|		0.退出		|\n");printf("+-------------------------------+\n");
}
int add(int a, int b)//加法函数
{return a + b;
}
int sub(int a, int b)//减法函数
{return a - b;
}
int mul(int a, int b)//乘法函数
{return a * b;
}
int div(int a, int b)//除法函数
{return a / b;
}
int main()
{int x=0, y=0;int input = 1;int ret = 0;do{menu();//打印菜单scanf("%d", &input);switch (input){case 1:printf("输入两个操作数:");scanf("%d %d", &x, &y);ret = add(x, y);printf("ret = %d\n", ret);break;case 2:printf("输入两个操作数:");scanf("%d %d", &x, &y);ret = sub(x, y);printf("ret = %d\n", ret);break;case 3:printf("输入两个操作数:");scanf("%d %d", &x, &y);ret = mul(x, y);printf("ret = %d\n", ret);break;case 4:printf("输入两个操作数:");scanf("%d %d", &x, &y);ret = div(x, y);printf("ret = %d\n", ret);break;case 0:printf("退出计算器\n");break;default:printf("很遗憾,并没有这个选项:\n");break;}} while (input);return 0;
}

对于上面的代码,我们可以使用函数指针来简化.
感受一下函数的指针的魅力吧!

#include <stdio.h>
void menu()
{printf("作者:初阶牛\n");printf("	欢迎使用计算器:\n");printf("+-------------------------------+\n");printf("|	1.add		2.sub	|\n");printf("|	3.mul		4.div	|\n");printf("|		0.退出		|\n");printf("+-------------------------------+\n");
}
int add(int a, int b)//加法函数
{return a + b;
}
int sub(int a, int b)//减法函数
{return a - b;
}
int mul(int a, int b)//乘法函数
{return a * b;
}
int div(int a, int b)//除法函数
{return a / b;
}
int main()
{int x = 0, y = 0;int input = 1;int ret = 0;int(*arr[5])(int, int)={0,add,sub,mul,div};//使用函数指针数组do{menu();scanf("%d", &input);if (input > 0 && input < 5){printf("输入两个操作数:");scanf("%d %d", &x, &y);ret=arr[input](x,y);//利用数组下标调用相应的函数printf("ret = %d\n", ret);}else if (input == 0){printf("退出计算器\n");break;}else{printf("很遗憾,并没有这个选项:\n");break;}} while (input);return 0;
}

三、函数指针数组指针

函数指针数组指针:
指向一个数组.该数组的成员都是函数指针.
写法:

1.先写出函数指针
char* (*p)(const int, double, char*);
2.改成函数指针数组
char* (*pp[3])(const int, double, char*);
3.最后写成函数指针数组指针char* (*(*ppp)[3])(const int, double, char*);

可以通过函数指针p调用函数,
也可以通过函数指针数组的元素,pp[0]调用函数.
最后,可以通过(*ppp)找到函数指针数组,(*ppp)[0]调用函数.

示例:

char* test(const int a, double b, char* c)
{char* ret = "AAABBBCCCDDD\n";return ret;
}
#include <stdio.h>
int main()
{//函数指针char* (*p)(const int, double, char*)=test;//函数指针数组char* (*pp[3])(const int, double, char*);pp[0] = test;//函数指针数组指针char* (*(*ppp)[3])(const int, double, char*)=&pp;printf("%s", test(0,0,0));printf("%s", p(0, 0, 0));printf("%s", pp[0](0, 0, 0));printf("%s", (*ppp)[0](0, 0, 0));return;
}

四、回调函数

回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。

大家还记得冒泡排序吗?
但是冒泡排序只能排序整形,而qsort函数,内部采用快速排序,可以排序各种类型的数据,接下来展示qsort排序部分类型的方法.

示例:qsort函数部分应用
分别将元素比较方法int_cmp和char_cmp的指针(地址) 传给 qsot函数.由qsort函数调用这些比较函数.

#include <stdlib.h>
#include <stdio.h>
int int_cmp(void* e1, void* e2)//整形元素排序方法
{return *(int*)e1 - *(int*)e2;
}
int char_cmp(void* e1, void* e2)//字符型元素排序方法
{return (*(char*)e1) - (*(char*)e2);
}
int main()
{int arr1[10] = { 4,5,1,8,9,2,10,3,7,6 };char arr2[] = "fbadegc";int sz1 = sizeof(arr1) / sizeof(arr1[0]);int sz2 = sizeof(arr2) / sizeof(arr2[0]);qsort(arr1,sz1,sizeof(arr1[0]),int_cmp);for (int i=0; i < sz1; i++){printf("%d ", arr1[i]);}printf("\n");qsort(arr2, sz2, sizeof(arr2[0]), char_cmp);for (int i = 0; i < sz2; i++){printf("%c ", arr2[i]);}printf("%s", arr2);return 0;
}

运行结果:

1 2 3 4 5 6 7 8 9 10
a b c d e f g

qsort函数冒泡排序的模拟实现,以及各种类型的排序.这周会加更出来的,好文不怕晚.🤣🤣🤣
最后,如果文章对大家有帮助的话,求一波三连吧!
💗💗💗886
在这里插入图片描述

http://www.dtcms.com/wzjs/411656.html

相关文章:

  • 受欢迎的合肥网站建设seo推广优化方案
  • 做面食专业网站四川百度推广和seo优化
  • 滨州建设工程备案网站南昌网站seo
  • 进入淘宝官网网站免费制作小程序平台
  • wordpress 小兽西安网络推广seo0515
  • 陕西省人民政府热线电话系统优化大师官方下载
  • 填表网站怎么做电商培训
  • 门户网站建设模板竞价托管信息
  • 上饶市网站建设深圳网站关键词优化公司
  • 申请网页的注意事项网站优化课程培训
  • 怎么做刷钻网站seo优化技术培训
  • 网站设计目标快速seo整站优化排行
  • 大良做网站优化seo公司哪家好
  • 网站建设营销公司百度推广售后客服电话
  • 深圳网站建设收费长沙网站关键词排名
  • 福州网站建设推进创建一个网站需要什么
  • 什么网站广告做多淘宝的关键词排名怎么查
  • 电子商务网站建设与实例企业网络营销案例分析
  • 公司网站建设会议纪要国外b站浏览器
  • 建设公司怎么做网站运营免费手机网页制作
  • 全球b2b平台seo外包优化网站
  • 新建站点的步骤网络营销做得比较成功的企业
  • 台州网站制作台州网站建设信息流广告有哪些投放平台
  • 郑州哪些公司做网站比较好网站搜索引擎优化主要方法
  • 河南省教育类网站前置审批网站推广的目的是什么
  • h5个人网站模板seo承诺排名的公司
  • 网站浏览路径怎么做搜索大全引擎入口
  • 郑州富士康官网seo网页推广
  • html指什么推广关键词优化
  • 为什么一个人做网站有难度优化网站关键词的技巧