首页技术c语言函数指针的用法 c语言指针函数的调用

c语言函数指针的用法 c语言指针函数的调用

编程之家2026-06-091147次浏览

很多朋友对于c语言函数指针的用法和c语言指针函数的调用不太懂,今天就由小编来为大家分享,希望可以帮助到大家,下面一起来看看吧!

c语言函数指针的用法 c语言指针函数的调用

C语言调用函数指针

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

你的程序中子程序采用的不是指针类型参数,这样子程序无法将交换过后的值传回来。

C语言 指针函数 函数指针 什么区别联系最好有例子一定采纳

没觉得指针函数这个概念有什么大的意义。。。。可能其最大的意义就是拿过来和函数指针一起混淆初学者的视听吧。

指针函数指的是返回一个指针的函数,比如我们常见的gets(),strcpy(),strcat(),malloc()等等。如果单独把它当成一个新概念真的没有什么意义。这些函数除了返回一个指针之外没有任何共性,但是返回的指针又天差地远。

下面说说函数指针。

指针分为三种类型:对象指针,函数指针和void指针。

c语言函数指针的用法 c语言指针函数的调用

函数指针的声明形式是T(*p)(...),其中*p使用括号括起来的原因是函数类型解析的优先级高于指针的解析,故使用括号防止解析成上面的指针函数(其实这两个之间就相差了一对括号)。

函数指针可以绑定到与其返回值和参数类型都相同的函数上。比如:

intfoo(int,double);//函数声明

int(*bar)(int,double)=foo;//函数指针在上面的初始化中,写成&foo也是可以的。

函数指针的最大特点就在于,其不能做一元+-运算(当然也不能做+=-=++--等),且对其做一元*运算的结果还是其本身。例如:(接着上面的例子)

bar(1,1.0);

c语言函数指针的用法 c语言指针函数的调用

(*bar)(1,1.0);//两种情况等价甚至你还可以这样:

(**************bar)(1,1.0);依然是对的。

所以实际应用中一般采取类似函数调用的方式,这样更加自然。

刚刚去测试了一下,还有一个更加隐蔽的问题:

C中的函数可以采用使用原型或者不使用两种方式。(不使用原型被视为过时)

原型即在函数头中将参数类型及个数都声明,而不使用就是很简单的一对括号。例如:

intfoo();//非原型

intbar(void);//原型

intfoo1(int);//原型这有什么影响呢?看一看下面的一段代码:

intfoo(inti){returni;}//原型

intfoo1(doublec){return(int)c;}//原型

intbar(){return1;}//非原型

intmain(void)

{

int(*foobar)(int);//原型

int(*barfoo)();//非原型

foobar=foo;

foobar=&foo;

foobar=bar;

foobar=foo1;//this

barfoo=foo;

barfoo=bar;

barfoo=foo1;

foobar(1);

(*foobar)(1);

(*************foobar)(1);

return0;

}我的编译器对this指的一行进行了警告,提醒指针类型不匹配。

我们可以看到,非原型的函数指针可绑定到任意的函数上,而带有原型的函数指针在绑定时可以起到更严格的类型限制。

容易忽略的一点是,不接受任何参数的函数(带原型)的声明方式是int foo(void);,不应该省略void,特别是在使用对应类型的函数指针时,如果省略void,那么错误的绑定也不会被警告。

我还注意到了一个现象:

intfoo(char);

int(*bar)()=foo;这段代码同样也给了警告。为什么呢?

因为在不使用原型的情况下,char,short,float等会被隐式提升到与其对应的更高级类型。

而在这个绑定中,bar是非原型,这时可能会进行整型提升,而foo带有原型,调用时不需要进行提升。这样就有可能引发错误。

以上就是函数指针使用过程中需要注意的一点。不过提醒LZ,函数指针使用过程中最好还是使用带有原型的函数指针。

c语言指针型函数

没区别,如果两个指针中间只有一个*就是两个指针(指针是地址是整数)相乘;指针内容*p是有类型的,编译器会对指针内容进行检查,如果类型匹配乘法运算(或*重载运算),就可以通过编译和运算。kp和pm是指针*kp和*pm是指针内容(k和m),*kp**pm实质就是两个指针内容进行相乘(k*m)。

END,本文到此结束,如果可以帮助到大家,还望关注本站哦!

网页设计border什么意思,border属性网页设计与制作学什么,网页设计容易学吗