C语言函数指针调用问题

作者&投稿:系泽 (若有异议请与网页底部的电邮联系)
C语言 函数指针 的调用问题?函数指针 怎么用?最好有例子。。~

#include
//定义类型fun_ptr,它是一个函数指针,指向的函数返回值为int,参数为int
typedef int (*fun_ptr)(int);

//fun1
int fun1(int a)
{
printf("call fun1,pram=%d,return %d+1
", a, a);
return a+1;
}
//fun2
int fun2(int a)
{
printf("call fun2,pram=%d,return %d+2
", a, a);
return a+2;
}

int main(int argc, char *argv[])
{
int a = 10;
int s = 0;
//定义函数指针类型的变量p_fun
fun_ptr p_fun;
//指向fun1
p_fun = fun1;
//执行
s=p_fun(a);
printf("s=%d
", s);

//指向fun2
p_fun = fun2;
//执行
s=p_fun(a);
printf("s=%d
", s);

return 0;
}
执行结果:

标准上说的是 函数名就是地址了,
按照你的max的说法,其实你的max函数是这样定义的 int (*max)(int,int);
但是标准里说*max这样太麻烦,于是可以将*max简写为max了
所以函数名就是那个地址

#include"stdio.h"
void sub(int* c,int* d,int* p,int* q)
{
int i,j;
i=(*c)*(*c);
j=(*d)*(*d);
*c=i*j;
*d=(i-j);
*p=i+j;
*q=i-j;
}
void main()
{
int i=3,j=4,k,s;
void sub(int*,int*,int*,int*); //参数表少个逗号,可以把这一行删掉,因为sub函数是在main()前面定义的
sub(&i,&j,&s,&k);
printf("k=%d\n",k);
printf("s=%d\n",s);
printf("i=%d\n",i);
printf("j=%d\n",j);
}

把这个
main()
{
int i=3,j=4,k,s;
void sub(int*,int*int*,int*);
sub(&i,&j,&s,&k);
printf("k=%d\n",k);
printf("s=%d\n",s);
printf("i=%d\n",i);
printf("j=%d\n",j);
}
改为
main()
{
int i=3,j=4,k,s;
void sub(int*,int*int*,int*);
printf("k=%d\n",k);
printf("s=%d\n",s);
printf("i=%d\n",i);
printf("j=%d\n",j);
sub(&i,&j,&s,&k);
}
因为前面那个是定义函数,调用函数应该在输入变量值之后。

没问题啊,给你分析了
#include"stdio.h"
void sub(int* c,int* d,int* p,int* q)
{
int i,j;
i=(*c)*(*c); //i = 3 * 3 = 9
j=(*d)*(*d); //j = 4 * 4 = 16
*c=i*j; //*c = 9 * 16 = 144
*d=(i-j); //*d = 9 - 16 = -7
*p=i+j; //*p = 9 + 16 = 25
*q=i-j; //*q = 9 - 16 = -7
}
void main()
{
int i=3,j=4,k,s;
sub(&i,&j,&s,&k); //sub后i=144, j=-7, s=25, k=-7
printf("k=%d\n",k); //-7
printf("s=%d\n",s); //25
printf("i=%d\n",i); //144
printf("j=%d\n",j); //-7
}

#include"stdio.h"
void sub(int* c,int* d,int* p,int* q)
{
int i,j;
i=(*c)*(*c);
j=(*d)*(*d);
*c=i*j;
*d=(i-j);
*p=i+j;
*q=i-j;
}
main()
{
int i=3,j=4,k,s;
void sub(int*,int*,int*,int*);
sub(&i,&j,&s,&k);
printf("k=%d\n",k);
printf("s=%d\n",s);
printf("i=%d\n",i);
printf("j=%d\n",j);
}

void sub(int*,int*int*,int*);掉了 ,改为void sub(int*,int*,int*,int*);


C语言函数指针调用
void point(char *p){ p+=3; } \/\/加上void比较好 char b[4]={'a','b','c','d'}, *p=b; \/\/写在同一行,p是char*的 point(p);\/\/ 这里传递的是指针,在函数里面改指针是“临时变量”,不是局部变量 \/\/临时对象不会被记录,如果改p指向的内存就可以被记录。printf("%c\\n", *...

C语言函数调用问题(选择题)
A是先取函数f返回的内存单元(参数是&i即i的地址)中存储的值,并作更改(改为6)B项 i+6 是算术表达式,不能直接取地址,必须使用变量保存才能取地址 C项 是定义一个指向整型的指针p,并赋值为函数f的返回值(该函数返回一个指针,也就是内存地址)D项 直接以&i为参数执行函数f,返回值不起任何...

C语言指针问题?
调用结束后,所有实际参数的值均不会发生变化。但是swap3中*pa,*pb发生的交换(实际就是主函数中a和b的值发生了交换)

C语言中函数调用问题
首先我们来说一下,你这个程序是有很大的问题的。函数有且只有唯一一个返回值,当程序执行到return的时候,这个函数就结束并返回了。所以,你这里写2个return来返回最大值和最小值是不可能的。再者,如果你想使用返回值作为最大值,最小值的传递,那么在main函数中,你调用star函数的时候需要一个变量...

c语言中的指针问题,以及子函数的调用
第一个是在根据指针, 交换指针所指的数据 第二个虽然写的使用"指针"在实现, 实际上, 他是在奖p1 和p2两个本地的变量值进行交换, 而并不是奖两个地址所指向的内存单元进行交换 第二个函数你如果吧所有的int * 都改成int, 就能更清楚的看到他到底在干嘛了 ...

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,...

C语言调用函数指针
并不是不规范的问题,你子程序写法只能在子程序中输出正确的数据,而在主函数中无法得到交换过的x和y的值。参考程序运用指针让子程序去读写a和b的值,在子程序执行完成后,a和b的值确实得到了交换。你的程序中子程序采用的不是指针类型参数,这样子程序无法将交换过后的值传回来。

c语言中函数调用有三种方法,能帮忙各举个例子吗?
1、voidbb(intcc);};实际上bb的函数原形是voidbb(aa&this,intcc);以前知道类的成员函数在调用时会传入一个this指针,而不晓得thiscall就是专门指定了这种调用方式。2、C语言中调用函数的方法及步骤:工具\/原料:C语言首先需要输入想要调用的函数。然后当输入一个括号后,即可观察他的参数。接着在...

C语言函数调用二维数组,指针问题
必须自己写成*(p+2*10+3)来调用 假如定义成 deal(int (*p)[10])就不一样了,编译器就能知道p是一个指向长度为10的数组的指针 那么p[2][3]就能编译成*(p+2*10+3)了 总之,C语言是很灵活的,不同的定义方式配上不同的用法,都是能得到正确的结果的 不知道这么说楼主明白了没?同样的...

C++指针变量进行函数调用的问题
pf=sort ; \/\/指针指向sort函数,可以通过pf指针来引用sort函数了(实际上这里是将sort函数的地址 值赋值给了pf,如果不理解这个,说明对指针的理解还不够清楚)pf(a,b,c) ; \/\/通过pf调用sort函数,这里等价于sort(a,b,c);viod sort (int x,int y,int z) \/\/这里多了个分号 { int ...

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

安定区18478112243: 在C语言中,指向函数的指针怎么调用函数? -
犹欧复方: 如果存在函数指针p,以*p取函数指针的值,然后加上参数列表调用即可. 即 ret = (*p)(arg_list); 如,p为int (*)(int)类型的函数指针,那么 int a = (*p)(10); 这样就是一次典型的函数指针调用.

安定区18478112243: c语言中的指针问题,以及子函数的调用 -
犹欧复方: 你的理解没有错,但问题在于,作为函数的参数为指针参数,也就是说作为指针类型而言,参数是按值进行传递,不会因为函数内部对指针进行了交换而发生改变.因此,第一个函数采用指针单元内的值进行交换,两个指针的内部值在外部是能反映出来,第二个函数在外部是反映不出来的.

安定区18478112243: C语言中指针函数调用问题???
犹欧复方: 两个函数返回的都是地址. 并没有指针和首地址的说法. 那么为什么第一个程序需要解引用输出. 而第二个则直接可以输出呢? 因为,第一个程序是输出单个字符%c,所以必须对地址进行解引用.而第二个程序,输出的是字符串. %s就是通过字符串的地址输出整个字符串.直到遇到字符串结束符.

安定区18478112243: 在C语言中如何调用双指针函数? -
犹欧复方: 传值给二级指针,需要先定义一个一级指针变量,再把这个指针变量的地址传进去.如:int *pBigger= &bigger; max( &x, &y, &pBigger); 不能写成:max( &x, &y, &(&bigger) )&(&bigger)理解上是取两次地址,但&bigger是取地址并不会返回一个此地址的变量(指针变量);

安定区18478112243: C语言 函数指针 的调用问题?函数指针 怎么用?最好有例子.. -
犹欧复方: 有函数: int fun(int a,int b); 要定义指向该函数的指针 对比指向 int a; 的指针 int *p; p = &a; p的定义是怎么来的?首先要保证p是一个指针类型 写下(*p),然后,考虑下p的基类型,p的基类型就是变量a的类型int 将int 放在(*p)前面就行了 ...

安定区18478112243: C语言函数指针调用问题 -
犹欧复方: 没问题啊,给你分析了#include"stdio.h" void sub(int* c,int* d,int* p,int* q) { int i,j; i=(*c)*(*c); //i = 3 * 3 = 9j=(*d)*(*d); //j = 4 * 4 = 16 *c=i*j; //*c = 9 * 16 = 144 *d=(i-j); //*d = 9 - 16 = -7 *p=i+j; //*p = 9 + 16 = 25 *q=i-j; //*q = 9 - 16 = -7 } void main() { int ...

安定区18478112243: C语言二级指针调用问题 -
犹欧复方: temp = list + i + j; // 获取指针貌似应该是 list[i] + j 按照你的逻辑来说

安定区18478112243: C语言指针调用函数问题,急求解释(本题是《c和指针》上的题目) -
犹欧复方: 我不清楚你的疑问到底指哪些.我就你写的这些代码解读:int read_column_numbers(int columns[], int max)函数功能:传参数组首地址,及数组最大长度. 用户输入max个整数,只保存其中的正整数(负数忽略),如果正整数的个数是偶数则返...

安定区18478112243: 求C语言中指针的用法 -
犹欧复方: 电脑程序中,不管是什么东西,他都对应有一个地址,而指针的作用是指向这个地址.例如int a=0; a的内容是0,但是在电脑中的内存地址就是其他,假如是2000,那么指针指向的就是这个2000的值.继续刚才的例子int *p;p=&a;这个时候p就指向了a的地址2000,如果想借助p来访问a,就需要在p前面添加上*号,如*p的内容就是0了,也是a的内容.

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