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

贵州城乡建设网站厂房设计装修公司

贵州城乡建设网站,厂房设计装修公司,阳江招聘网前程无忧,稻壳企业网站模板函数指针 上面的第二个char (* f) (int);写法就是函数指针的声明; 首先,什么是函数指针?假设有一个指向 int类型变量的指针,该指针储存着这个int类型变量储存在内存位置的地址。 同样,函数也有地址,因为函…

函数指针

上面的第二个char (* f) (int);写法就是函数指针的声明;
首先,什么是函数指针?假设有一个指向 int类型变量的指针,该指针储存着这个int类型变量储存在内存位置的地址。 同样,函数也有地址,因为函数的机器语言实现由载入内存的代码组成。指向函数的指针中储存着函数代码的起始处的地址。

函数的指针作用

通常函数的指针作为 另一个函数的参数。
也就是当你想将一个函数作为参数传给另一个函数的时候,比如
我想在一个函数中使用其他任意函数,那么我就需要将其他函数作为参数传进来,如下:
void show(void (* fp)(char *), char * str);

比如C语言中<stdlib.h>中有个qsort
他的函数原型为

void qsort(void *base, int nelem, int width, int (*fcmp)(const void *,const void *))

各参数:

  1. 待排序数组首地址(可直接输入待排序数组名,或是指向数组的指针)
  2. 数组中待排序元素数量(可以用sizeof()来求)
  3. 各元素的占用空间大小(可以用sizeof(arr[0])来求)
  4. 指向函数的指针

qsort()函数可以处理任意类型的数组,但是要告诉 qsort()使用哪个函数来比较元素。为此, qsort()函数的参数列表中,有一个 参数接受指向函数的指针。然后,qsort()函数使用该函数提供的方案进行排序,无论这个数组中的元素是整数、字符串还是结构。例如,排序数组涉及比较两个元素,以确定先后。如果 元素是数字,可以使用>运算符;如果元素是字符串或结构,就要调用函数 进行比较

赋值

给函数指针赋值

void (*pf)(char *); //函数指针的声明
void ToUpper(char *); 
void ToLower(char *); 
int round(double); pf = ToUpper;   // 有效,ToUpper是该类型函数的地址 
pf = ToLower;   // 有效,ToUpper是该类型函数的地址 
pf = round;    // 无效,round与指针类型不匹配 
pf = ToLower();  // 无效,ToLower()不是地址

使用

void ToUpper(char *); 
void ToLower(char *); 
void (*pf)(char *); 
char mis[] = "Nina Metier"; 
pf = ToUpper; 
(*pf)(mis);  // 使用方式一:把ToUpper 作用于(语法1) 
pf = ToLower; 
pf(mis);   // 使用方式二:把ToLower 作用于(语法2)

这两种表示法其实等价,只不过第二种方式不是很好看。所以尽量使用第一种使用方式。

下面我们看一个具体实例:

// func_ptr.c -- uses function pointers
#include <stdio.h>
#include <string.h>
#include <ctype.h>void show(void (* fp)(char *), char * str);
void ToUpper(char *);   // convert string to uppercase
void ToLower(char *);   // convert string to uppercase
void Transpose(char *); // transpose cases
void Dummy(char *);     // leave string unalteredint main(void)
{void (*pfun)(char *); // points a function having a char * argument and no return valuechar choice = 'l';char line[] = "fanganFDNGlajf";char copy[81];switch (choice)  // switch sets pointer{case 'u' : pfun = ToUpper;   break; //给函数指针赋值case 'l' : pfun = ToLower;   break;case 't' : pfun = Transpose; break;case 'o' : pfun = Dummy;     break;}strcpy(copy, line);// make copy for show()show(pfun, copy);  // use selected functionreturn 0;
}void ToUpper(char * str)
{while (*str){*str = toupper(*str);str++;}
}void ToLower(char * str)
{while (*str){*str = tolower(*str);str++;}
}
void Transpose(char * str)
{while (*str){if (islower(*str))*str = toupper(*str);else if (isupper(*str))*str = tolower(*str);str++;}
}void Dummy(char * str)
{// leaves string unchanged
}// 定义函数,将一个函数指针作为第一个参数
void show(void (* fp)(char *), char * str)
{(*fp)(str); // apply chosen function to str,调用传入的函数puts(str);  // display result
}

最后我们可以看到函数名有四种用法
在这里插入图片描述

http://www.yayakq.cn/news/548627/

相关文章:

  • 建一个商城网站需要多少钱湖北建设局网站首页
  • 商丘做微信网站sqwyy提卡网站怎么做
  • 360网站推广官网球阀什么网站可以做投资
  • 商城网站建设报二手房网站建设书
  • 乐清网站建设yq01出库入库管理软件app
  • 网站建设 - 碧诺网络有没有做a的电影网站
  • 网站弹出文字做外贸兼职的网站有哪些
  • 青岛网页建站工具有关电子商务网站建设的 论文
  • 商城网站备案能通过吗淄博网站建设团队
  • 建好网站是不是还得维护看守所加强自身网站建设工作总结
  • 商城网站的建设定位公司在选择网站时应考虑什么
  • 怎样网站制作设计网站建设套餐介绍
  • 信息作业网站下载收到一张网站服务费怎么做凭证
  • 网站建设开票税率一键急速安装wordpress
  • 个人网站设计论文的结论房屋设计图用什么软件
  • 电商网站的意义邢台企业做网站价格
  • 韶关住房和城乡建设部网站网址入口
  • 网站首页页面代码电脑网站和手机网站怎么做相同路径
  • 英文网站营销wordpress 屏蔽特定国家ip
  • 灯饰网站源码红色大气网站模板
  • 河北中石化建设网站新闻门户网站是什么
  • 做阿里巴巴类似的网站吗电商平台搭建方案
  • 网站在线制作平台特色直播
  • 做二手车有哪些网站有哪些手续费连云港做电商网站的公司
  • 网站开发大概需要多少钱logo设计公司介绍
  • 深圳商业网站建设推荐公司购物网站建设方案
  • dk域名网站网站版块设计是什么意思
  • 网站建设网站建设哪里有重庆沙坪坝火车站
  • 河北手机版建站系统价格厦门市网站建设app开发
  • 高端企业网站要多少钱芝麻开门网站建设