【编程开发】 C与C++中的关于函数指针的强制类型转换与指针函数的关系

标签: 【编程开发】 【VS开发】


声明:引用请注明出处http://blog.csdn.net/lg1259156776/


以qsort为例:

int cmpa(const void *a, const void *b)
{if ( *(double*)a < *(double*)b )return -1;if ( *(double*)a == *(double*)b )return 0;return 1;
}int cmpb(const double*a, const double*b)
{if (*a < *b )return -1;if ( *a == *b )return 0;return 1;
}//调用测试
{const sampleSize=5;double A[sampleSize] = {1,3,4,2,5};qsort(A, sampleSize, sizeof(double), cmpa); //标准型qsort(A, sampleSize, sizeof(double), (int (__cdecl *)(const void *, const void *))cmpb); //强制转换型
}

函数指针的强制类型转换可以采用这样方式显式给出,包括函数的返回值与实参类型都可以显式指定:

(int (__cdecl *)(const void *, const void *))cmpb

这里再区分一个概念:函数指针与指针函数;函数指针指的是指向函数的指针,而指针函数指的是返回值是指针的函数,本质上一个是指针,一个是函数。类似下面的例程:

//指针函数是指返回值是指针的函数,即本质是一个函数:
#include<iostream>
using namespace std;
int main()
{float*find(float(*p)[4],intm);//查询序号为m的学生的四门课程的成绩float score[][4]={{50,51,52,55},{70,70,40,80},{77,99,88,67}};//定义成绩数组,第一维可以为变量float*pf=NULL;//定义一个指针时一定要初始化int i,m;cout<<"请输入您想查询的学生的序号:";cin>>m;pf=find(score,m);//返回为一维数组指针,指向一个学生成绩for(i=0;i<4;i++)cout<<*(pf+i)<<"";cout<<endl;return 0;
}
float *find(float(*p)[4],intm)
{float *pf=NULL;pf=*(p+m);//p是指向二维数组的指针,加*取一维数组的指针return pf;
}

学生学号从0号算起,函数find()被定义为指针函数,其形参pointer是指针指向包含4个元素的一维数组的指针变量。pf是一个指针变量,它指向浮点型变量。main()函数中调用find()函数,将score数组的首地址传给pointer【摘自百度百科】.


2015-11-11 调试记录 张朋艺

转载于:https://www.cnblogs.com/huty/p/8518942.html

【编程开发】 C与C++中的关于函数指针的强制类型转换与指针函数的关系相关推荐

  1. 集合中获取元素为什么要进行强制类型转换

  2. 深入理解C++中五种强制类型转换的使用场景

    深入理解C++中五种强制类型转换的使用场景 1.C风格的强制类型转换 2.C++风格的强制类型转换 2.1.static_cast 2.1.1.用于基本内置数据类型之间的转换 2.1.2.用于指针之间 ...

  3. c语言中字符指针变量输入,C语言指针基础知识实例讲解

    对程序进行编译的时候,系统会把变量分配在内存单位中,根据不同的变量类型,分配不同的字节大小.比如int整型变量分配4个字节,char字符型变量分配1个字节等等.被分配在内存的变量,可以通过地址去找到, ...

  4. C++中指针的强制转换

    转自:https://blog.csdn.net/u012273127/article/details/53260978 其又转自:http://blog.csdn.net/mhjcumt/artic ...

  5. 【VS开发】【编程开发】【C/C++开发】结构体中的数组与指针的内存分配情况说明...

    [VS开发][编程开发][C/C++开发]结构体中的数组与指针的内存分配情况说明 标签:[VS开发] [编程开发] 主要是疑惑在结构体定义的数组的内存空间与指针动态分配的内存空间,在地址上连续性.以及 ...

  6. 编程开发中最浪费时间和资源的7个错误

     编程开发中最浪费时间和资源的7个错误 我在当地几家公司担任过项目经理,项目主要关于一些用PHP制作的中小型网页.在那段历程中,我见识了很多公司常常会犯这样或那样的错误,既浪费时间又浪费资源.下面 ...

  7. java vector编程_Java编程开发中向量(Vector)及其应用

    要学习Java编程开发中向量及其应用方面的知识就要先了解什么是向量,向量是如何声明及初始化的,下面就让IT培训网专家来给大家详细介绍下如何认识向量及其使用方法吧! 关于向量的介绍: 向量 vector ...

  8. vscode 单击跳转_vscode中ctrl+鼠标左键不能跳转_编程开发工具

    mac电脑怎么样安装vscode_编程开发工具 mac电脑安装vscode的方法是:1.打开浏览器搜索vscode,进入官网:2.点击[download for mac]进行下载:3.双击下载的压缩包 ...

  9. 编程开发中的起名规范

    编程开发中的命名规范 混乱的workspace 修改项目名称 学习资料 混乱的workspace 工作一年当中接触到的都是别人写好的项目,很多时候就直接用了以前的项目名字,随着手里的项目越来越多,各种 ...

  10. c语言 编程 函数声明,C语言编程开发中的函数声明与定义

    函数功能的使用在许多编程开发语言中都是有不同的使用方法的,而今天我们就一起来了解一下,在C语言编程开发中的函数功能使用与定义. 对函数的"定义"和"声明"不是一 ...

最新文章

  1. wgrib读grib数据
  2. 上验证cudnn是否安装成功_windows和linux上的tensorflow安装(极简安装方法)
  3. php robots.txt,robots.txt的写法
  4. python画饼图程序_python使用matplotlib画饼状图
  5. 多个 ng-app 中 Controllers Services 之间的通信
  6. NAS、SAN和DAS的区别
  7. 服务器日志监控系统怎么解决,服务器日志监控系统
  8. PHP以指定字段为索引返回数组数据
  9. server2012文件服务器的开始按钮,Windows Server 2012实用技巧集锦
  10. oracle存储过程实例带参数,oracle简单存储过程(带参数)
  11. 贾俊平《统计学基于R》(第三版)第八章方差分析习题答案
  12. mecrosoft excel的单元格引用
  13. uncode,utf8编码的文章
  14. [Ynoi2016]炸脖龙I/Nephren Ruq Insania
  15. 电子产品销售数据分析及RFM用户价值分析
  16. 蓝标智能营销转型之战 ——Oracle Eloqua 市场营销云助力蓝标盈云迎战全渠道营销...
  17. 了解音频频率范围和音频元器件
  18. Java 中的 Clone()
  19. 怎么删除批注mysql_如何去掉 Word 文档修订和批注和不显示已删除内容
  20. 鸿蒙系统生态建设怎样了,鸿蒙系统正式发布-华为OS生态建设开始布局

热门文章

  1. using的一种用法
  2. Nginx连接池实现,源码阅读
  3. 以太网交换机工作原理
  4. redis内核单元测试框架
  5. $.ajax的回调function中的this与 element-ui的this.$alert冲突问题解决
  6. k8s学习笔记-Docker篇
  7. Android Studio右下角显示当前branch名称不一致
  8. 3.调整web框架行为 3.1配置路径匹配形式
  9. Struts2之类型转换中的错误
  10. 【渝粤教育】国家开放大学2018年春季 0557-22T广告设计 参考试题