首页技术c语言函数指针,c语言二维数组

c语言函数指针,c语言二维数组

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

大家好,今天来为大家解答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语言怎么让一个函数返回指针

这种方式叫做“用指针函数*creat()的返回值来传递动态内存”,这是一个C语法

首先你要注意,子函数*creat()用了malloc动态申请内存,而return返回的是指针变量所指向的地址,而不是指针!相当于将你所申请的动态内存返回给主函数

int*fun(void)//这里是指针函数

{

int*p=(int*) malloc(int);//动态申请内存//p在这里指向了一块合法内存的地址

return p;

}

void main(void)

{

int*q= NULL;

q= fun();//fun()返回指针p所指向的地址,(指针p是在栈上创建的,所以*fun()函数运行完,指针所分配的内存被系统自动释放)这时q指向p,得到了malloc所申请到的内存

free(q);//释放动态内存

}

c语言函数指针和c语言二维数组的问题分享结束啦,以上的文章解决了您的问题吗?欢迎您下次再来哦!

个人网页模板html代码?html网页制作python爬虫菜鸟教程,python爬虫最全教程