int *p()是返回指针的函数

int (*p)()是指向函数的指针

 

返回指针的函数:

int *a(int x,int y);

有若干个学生的成绩(每个学生有4门课程),要求在用户输入学生序号以后,能输出该学生的全部成绩。用指针函数来实现。

 #include <iostream>
#include <stdio.h>
#include <vector>
#include <string.h>
using namespace std;
#define NOCLASS 4
float *search(float (*pointer)[NOCLASS], int iter);
int main(int argc, char* argv[])
{
float score[][NOCLASS] = {{,,,}, {,,,}, {,,,}, {,,,},{,,,},{,,,}}; float *p;
int m;
while()
{
printf("enter the number of student:");
scanf("%d", &m);
printf("the scores of No.%d are:\n", m);
p = search(score, m);
for (int i = ; i < NOCLASS; ++i) {
//请思考Line22和Line35为什么不一样呢, 一维与二维
printf("%5.2f\t", *(p+i));
printf("p+i:%#x\n",p+i);
}
printf("\n");
}
return ;
} //数组指针,是一个指针,指向一个数组,相当于二位数组,n*4,int,int,int,int
float *search(float (*pointer)[NOCLASS], int iter)
{
float *pt;
printf("pointer:%#x\n", pointer);
pt = *(pointer + iter);//*(*(p+iter)+0)) = *(*(p+iter))
printf("pt:%#x\n", pt);
return (pt);
}

指向函数的指针

实参函数名      f1           f2

             ↓              ↓

void sub(int (*x1)(int),int (*x2)(int,int)

{  int a,b,i,j;

a=*x1)(i); /*调用f1函数*/

b=*x2)(i,j);/*调用f2函数*/

例:设一个函数process,在调用它的时候,每次实现不同的功能。输入a和b两个数,第一次调用process时找出a和b中大者,第二次找出其中小者,第三次求a与b之和。

 #include <stdio.h>
#include <iostream>
#include <vector>
#include <string.h>
using namespace std;
void process(int, int, int (*func)(int, int));
int max(int x, int y);
int min(int, int);
int add(int, int);
int main(int argc, char* argv[])
{
int x = , y = ;
printf("max is:");
process(x, y, max);
printf("min is:");
process(x,y, min);
printf("add is:");
process(x, y, add);
return ;
}
void process(int x, int y, int (*func)(int, int))
{
int result;
result = (*func)(x,y);
printf("%d\n", result);
}
int max(int x, int y){
return (x>y?x:y);
}
int min(int x, int y){
return (x<y?x:y);
}
int add(int a, int b){
return (a+b);
}

2016-10-20 19:40:43

int (*a[10]) (int);这个是定义了一个函数指针数组,指向的函数类型是int func(int)

 #include <iostream>
#include <stdio.h>
using namespace std; int func1(int n)
{
printf("func1: %d\n", n);
return n;
}
int func2(int n)
{
printf("func2: %d\n", n);
return n;
}
int main()
{
int (*a[])(int) = {NULL};
a[] = func1;
a[] = func2;
a[]();
a[]();
return ;
}

谁见过这种,某面试者出的,感觉糊弄人的,void (*(*func))(int)[10];

int *p()与int (*p)()的区别的更多相关文章

  1. Convert.ToInt32()、int.Parse()和(int)三者的区别

    Convert.ToInt32将object类类型转换成int类型,如Convert.ToInt32(session["shuzi"]); (int)适合简单数据类型之间的转换: ...

  2. C#中(int)、int.Parse()、int.TryParse()和Convert.ToInt32()的区别

    转自:http://www.cnblogs.com/leolis/p/3968943.html 在编程过程中,数据转换是经常要用到的,C#中数据转换的方法很多,拿将目标对象转换为 整型(int)来讲, ...

  3. C#中(int)、int.Parse()、int.TryParse()和Convert.ToInt32()的区别 <转>

    作者:Statmoon 出处:http://leolis.cnblogs.com/   在编程过程中,数据转换是经常要用到的,C#中数据转换的方法很多,拿将目标对象转换为整型(int)来讲,有四种方法 ...

  4. (int)、int.Parse()、int.TryParse()和Convert.ToInt32()的区别

    C#中(int).int.Parse().int.TryParse()和Convert.ToInt32()的区别   原文链接:http://www.cnblogs.com/leolis/p/3968 ...

  5. mysql int(3)与int(11)的区别

    总结,int(M) zerofill,加上zerofill后M才表现出有点点效果,比如 int(3) zerofill,你插入到数据库里的是10,则实际插入为010,也就是在前面补充加了一个0.如果i ...

  6. const int *p与int *const p的区别(转:csdn,suer0101)

    本文只是一篇学习笔记,是看了<彻底搞定C指针>中的相关篇幅后的一点总结,仅此而已! 一.先搞清const int *p与int const *p的区别 它们的区别就是:没有区别!! 无论谁 ...

  7. Mysql数据库int(1)和tinyint(1)的区别&&扩展阅读

    转自:http://blog.csdn.net/phpwish/article/details/7845921 今天看项目的数据库结构设计,发现一个奇怪的地方. `xxx_detail`   `del ...

  8. new int[]和new int()的区别

    1. new int[] 是创建一个int型数组,数组大小是在[]中指定,例如:int * p = new int[10]; //p执行一个长度为10的int数组.2. new int()是创建一个i ...

  9. C#中Convert.ToInt32、int.TryParse、(int)和int.Parse四者的区别

    Convert.ToInt32.(int)和int.Parse三者的区别: 首先:Convert.ToInt32 适合将object类类型转换成int类型,如Convert.ToInt32(sessi ...

  10. int(1)和int(11)是否有区别?

    MySQL类型关键字后面的括号内指定整数值的显示宽度(例如,INT(11)).该可选显示宽度规定用于显示宽度小于指定的列宽度的值时从左侧填满宽度.显示宽度并不限制可以在列内保存的值的范围,也不限制超过 ...

随机推荐

  1. jQuery的查找

    children([expr])概述 :取得一个包含匹配的元素集合中每一个元素的所有子元素的元素集合.可以通过可选的表达式来过滤所匹配的子元素.注意:parents()将查找所有祖辈元素,而child ...

  2. 如果您想省略JS里的分号,了解一下JS的分号插入原理吧

    仅在}之前.一个或多个换行之后和程序输入的结尾被插入 也就是说你只能在一行.一个代码块和一段程序结束的地方省略分号. 也就是说你可以写如下代码 function square(x) { var n = ...

  3. Maven学习笔记-01-Maven入门

    一 Maven的基本概念 Maven(翻译为"专家","内行")是跨平台的项目管理工具.主要服务于基于Java平台的项目构建,依赖管理和项目信息管理. 1  项 ...

  4. js获取页面url的方法

    我们可以用javascript获得其中的各个部分 1, window.location.href 整个URl字符串(在浏览器中就是完整的地址栏) 本例返回值: http://ifisker.com/b ...

  5. mysql随机获取一条或者多条数据

    原文地址:http://www.im286.com/thread-7091552-1-1.html 转来备份 研究一些随机的因素,主要是讲究效率问题. 语句一: MYSQL手册里面针对RAND()的提 ...

  6. WebService中方法的相关注意事项

    2014-11-14 在WebService中定义方法,有一些注意的地方: (1) 方法上面需要增加 [WebMethod] 属性,标志该方法是一个WebService方法: (2)方法的返回值可以为 ...

  7. bootstrap-select搜索框输入中文

    bootstrap-select 的搜索框无法输入中文,解决办法: 删除源码中这两行代码 that.$lis.not('.hidden, .divider, .dropdown-header').eq ...

  8. .NET设计模式(2):单件模式(Singleton Pattern)(转载)

    概述 Singleton模 式要求一个类有且仅有一个实例,并且提供了一个全局的访问点.这就提出了一个问题:如何绕过常规的构造器,提供一种机制来保证一个类只有一个实例?客户程 序在调用某一个类时,它是不 ...

  9. Windows性能计数器

    LogicalDisk\% Free Space 它测量选定逻辑磁盘上的可用空间百分比.请注意,如果此值低于 15%,则表示可用空间不足,操作系统无法存储关键文件.一个最直接的解决方案是增加更多的磁盘 ...

  10. [Effective JavaScript 笔记]第24条:使用变量保存arguments对象

    迭代器(iterator)是一个可以顺序存取数据集合的对象.其一个典型的API是next方法.该方法获得序列中的下一个值. 迭代器示例 题目:希望编写一个便利的函数,它可以接收任意数量的参数,并为这些 ...