1.函数指针的数组定义方法:返回值类型( * 指针变量名[Number]) (形参列表)。
例如:
double add(double a,double b){}
double sub(double a,double b){}
double mul(double a,double b){}
double div1(double a,double b){}
double (*oper_func[])(double, double) = {add,sub,mul,div1}//函数指针的数组定义。
2.函数指针是指向函数的指针变量。 因而“函数指针”本身首先应是指针变量,只不过该指针变量指向函数。这正如用指针变量可指向整型变量、字符型、数组一样,这里是指向函数。
C在编译时,每一个函数都有一个入口地址,该入口地址就是函数指针所指向的地址。有了指向函数的指针变量后,可用该指针变量调用函数。
扩展资料:
指针函数和函数指针的区别:
这两个概念都是简称,指针函数是指返回值是指针的函数,即本质是一个函数。我们知道函数都有返回类型(如果不返回值,则为无值型),只不过指针函数返回类型是某一类型的指针。其定义格式如下所示:返回类型标识符*函数名称。
返回类型可以是任何基本类型和复合类型。返回指针的函数的用途十分广泛。事实上,每一个函数,即使它不带有返回某种类型的指针,它本身都有一个入口地址,该地址相当于一个指针。比如函数返回一个整型值,实际上也相当于返回一个指针变量的值,不过这时的变量是函数本身而已,而整个函数相当于一个“变量”。
参考资料:百度百科 - 函数指针
对于有数组参数的函数,编译程序要为其开辟相应的内存空间,而程序中两个函数都有数组参数a[n][m],由于n,m是变量,编译程序并不知道n,m的具体值,所以不能
通过编译。
修改:
1.在#include<>下面添加以下伪指令:
#define n 5
#define m 5
2.将函数的参数形式改为:
int sum(int a[n][m])
void pl(int a[n][m])
并按此修改程序文件中所有关于这两个函数的申明和调用即可
给你看一下我的代码#include<stdio.h>
void main(){
int a[10],b[10],i,j,temp
for(i=0i<10i++){
printf("请输入第%d个数:",(i+1))
scanf("%d",&a[i])
//保存数组,因为输入完数组要冒泡排序,排序后的元素顺序可能和原数组不一样
b[i]=a[i]
}
//冒泡排序,求最大值
for(i=0i<9i++){
for(j=0j<9-ij++){
if(a[j]<a[j+1]){ //这里控制的升序还是降序,我这是降序
temp=a[j]
a[j]=a[j+1]
a[j+1]=temp
}
}
}
//查找最大值在原数组的位置
for(i=0i<10i++){
if(b[i]==a[0]){ //降序的话最大值是a[0],升序的话最大值是a[9]
break //一旦找到最大值,马上跳出循环
}
}
printf("最大值是%d,它在原数组中是第%d个元素!\n",a[0],(i+1))
}