c语言 指向数组的函数指针是怎么调用的啊,就是在main里面怎么写

作者&投稿:愚伟 (若有异议请与网页底部的电邮联系)
C语言 怎么调用指针数组函数~

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在编译时,每一个函数都有一个入口地址,该入口地址就是函数指针所指向的地址。有了指向函数的指针变量后,可用该指针变量调用函数,就如同用指针变量可引用其他类型变量一样,在这些概念上是大体一致的。函数指针有两个用途:调用函数和做函数的参数。3.函数指针的声明方法为:返回值类型( * 指针变量名) (形参列表);“返回值类型”说明函数的返回类型,“( * 指针变量名)”中的括号不能省,括号改变了运算符的优先级。若省略整体则成为一个函数说明,说明了一个返回的数据类型是指针的函数,后面的“形参列表”表示指针变量指向的函数所带的参数列表。例如:int func(int x); /* 声明一个函数 */int (*f) (int x); /* 声明一个函数指针 */f = func; /* 将func函数的首地址赋给指针f */或者使用下面的方法将函数地址赋给函数指针:f = &func;赋值时函数func不带括号,也不带参数,由于func代表函数的首地址,因此经过赋值以后,指针f就指向函数func(x)的代码的首地址。例子:
#includeint max(int x,int y){return (x>y? x:y);}int main(){ int (*ptr)(int, int); int a, b, c; ptr = max; scanf("%d%d", &a, &b); c = (*ptr)(a,b); printf("a=%d, b=%d, max=%d", a, b, c); return 0;}

1楼感觉对函数指针不是很了解,就不评论了. 2楼的基本还可以,但是int (*p)(),然后让它指向max函数,一个包含两个未知量的函数,这在后来的标准c里面是不支持的好像. 3楼吧,那么多*,感觉有点不大对. *是取内容,连着那么* ,我没试过,没有多少意义至少.他11级了,应该也不会怎么有错,你可以试试(我不打算加那么多*, 就不调试了).
程序里面对函数的调用,就是通过函数的入口地址,然转入函数. 这样的话,函数指针的意义就明显了.函数指针指向了函数的入口,即函数指针里是函数的入口地址. 指针不能指向函数这种说法肯定是不对的.话说回来,1楼的老兄可能看错书了,或者记错了.
类型匹配很重要,二楼的声明和使用不一致,这在老版的编译器里也是支持的.那时候ANSI标准还没有制定出来.现在而言,这种定义应该不被支持了才是.
那个声明应该如下:
int (*p)(int , int);
这样才能指向
int name(int,int)型的函数.么有实验过,但按这种写法是不错的肯定.
三楼那个********p,怎么都觉得不对.

你说的“指向数组的函数指针”,是指 指针指向数组,数组是由函数指针构成,是不是这样?

定义函数int *f(char a[],char b[])
主函数里面用x=f(a,b)即x为地址


克拉玛依市17833258779: 在C语言中,指向函数的指针怎么调用函数? -
苍霞康迈: 如果存在函数指针p,以*p取函数指针的值,然后加上参数列表调用即可. 即 ret = (*p)(arg_list); 如,p为int (*)(int)类型的函数指针,那么 int a = (*p)(10); 这样就是一次典型的函数指针调用.

克拉玛依市17833258779: C语言 怎么调用指针数组函数
苍霞康迈: #include<stdio.h>#include<string.h> void paixu(char **a) {int i,j;char *p;for(i=0;i<5;i++){for(j=0;j<4-i;j++){if(strcmp(a[j],a[j+1])>0){p=a[j];a[j]=a[j+1];a[j+1]=p;}}} } void main() {char *a[]={"Hongkong","Singgapore","Beijing","...

克拉玛依市17833258779: C语言中关于指向数组的指针 -
苍霞康迈: char str[100]; char *pi=str; //相当于char *pi ;pi=str; char **ppi=*pi;//这个地方抄错了.应为char **ppi=&pi;定义加*表明这是指针类型的变量 用的时候,就是用的指针,加*干什么.只有取指针所指变量的值,或给指针所指的变量赋值的等涉及指针所指的变量的时候,才会又加*号,表示获取或改变,指针所指变量的值.char x=10;*pi =x; //给指针所指的变量赋值,改变指针所指变量的值(改变*pi) .x=*pi; //取指针所指的值,取指针pi所指的变量的值(表示为*pi)赋值给x.

克拉玛依市17833258779: 关于C语言中指向函数的指针的调用问题 -
苍霞康迈: 两种方式,在某些环境下是等效的,但是个人建议使用m=(*p)(a)这种方式,表意明确 说是等效的原因是实际上函数名也只是一个地址而已 但是要注意的是,m=p(a)这样的写法【据说】某些编译器认为是错误的表达式,会导致编译错误(但是同时,如果lz看书比较仔细的话,可能会在经典书籍<Pointers on C>一书中见到说两种表示都是合理的[中文版P261],所以我之前强调了是"据说",事实上,我到今天所用过的所有C编译器都支持两种表示方式;但是我们再回到经典中的经典<The C Programming Language>中使用的函数指针都是m=(*p)(a)这种方式[5.11 指向函数的指针])

克拉玛依市17833258779: C语言怎么让“函数”返回“指针数组” -
苍霞康迈: 首先,你不应该返回局部变量的指针,因为局部变量在离开函数后就会被销毁.如果你想这样返回一个数组的话,你应该malloc出一个数组来返回. 至于应该return什么,return (malloc出来的那个指针)就可以了. 例如 int** foo() { int **p = (int **)malloc(sizeof(int *)*10); ... ... ... return p; } 这个p指向一个内存段,这个内存段存有十个int*类型的元素.

克拉玛依市17833258779: 用C语言如何使函数返回值为指向一维数组的指针?
苍霞康迈: 这个问题一个较为妥善的方法是把数组定义在主函数,再传入数组地址给自定义函数,如果你非要在自定义函数里定义也行,至于是否需要设置为static,那得看情况,因为函数退出时栈空间并不是马上被刷新,如果你能保证该栈空间在你访问前没被释放就没必要定义为static,但是保险起见定义static更好,因为你可能不知道到底该内存是不是被重新写入了数据,至于你说要返回指向指针的指针,我举个例子,int** fun(),这个就是返回一个指向指针的指针,其指向的指针指向int型,呵呵,明白了没

克拉玛依市17833258779: 如何在C函数中传递指向二维数组的指针参数 -
苍霞康迈: 声明一个二维数组int matrix[100][100];当把二维数组作为参数传递的时候很多人可能一上来就这样写intfun(int **matrix)

克拉玛依市17833258779: C语言中向一个函数传递一个数组,函数中定义一个指针变量,请问这个指针变量在for循环中要怎么使用? -
苍霞康迈: void fun(a,10) 将数组a的首地址赋给指针s { int i; i 计的是这数组中有几个字母 for (;*s;s++) 每循环一次,s后移一位,判断结束循环的条件s指向的内容为" \0 " { if(*s>='a'&&*s<='z'||*s>='A'&&*s<='Z') i++; }

克拉玛依市17833258779: c语言如何在局部函数里,改变指针的指向 -
苍霞康迈: 1、如果函数参数直接传递的是指针类型,那么在函数内改变指针指向,并不能影响函数外的指针实例.只有传入指针的指针,才能改变指针的指向.2、函数里的形参是一般变量,在函数里面改变变量的值,不会改变主函数里实参的值.指针就是地址变量,在函数里改变地址变量的值时,不会改变主函数实参地址变量的值.只有在函数里改变指针所指向的变量的值时 主函数实参指针所指向的变量的值才会改变.

克拉玛依市17833258779: C语言指向函数的指针的调用 -
苍霞康迈: #include<stdio.h>int *d_bubblesort(int a[],int n)//数组长度为n的冒泡降序排序 { int i,j; int temp; for(i=0;i<n;i++) { for(j=n-1;j>i;j--) { if(a[j]>a[j-1]) { temp=a[j-1]; a[j-1]=a[j]; a[j]=temp; }} } return a; }void main() { int i; int *p=NULL; int a[10]={6,5,4,1,2,3,9,8,7...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网