您的位置:首页 > 编程语言 > C语言/C++

C语言中的函数指针与指针函数(续)

2016-07-22 15:33 465 查看
函数是任何一门语言中必不可少的部分,正是由这些函数组成了程序。首先谈一下C语言中的函数指针与指针函数,再了解一下函数参数传递的相关原理。

1.函数指针与指针函数

(1) 函数指针 即指向这个函数的指针,定义为 数据类型 (fun)(参数列表) ,()的优先级比高,所以fun加括号。如 void (*fun)(int,int*);

(2)指针函数 即返回值是指针的函数,定义为 数据类型 * fun(参数列表). 如 char* fun(int*,int*);即返回值为char*型。

在C语言中,变量有它的地址,同理函数也是有地址的。那么把函数的地址赋给函数指针,再通过函数指针调用这个函数就可以了。

第一步: 定义函数指针,如 int (pfun)(int,int*);

第二步: 定义函数 如 int fun(int*,int*);

第三步: 把函数的地址赋给函数指针,即 pfun=fun;

第四步: 通过函数指针去调用这个函数 (*pfun)(p,q); //pfun是函数的地址,那么 *pfun当然就是函数本身了。

2.函数参数传递问题

在C语言中,有两种参数传递的方式 ,一种是值传递,另一种是指针传递。

值传递很好理解,即把实参的值传递给形参。

而指针传递传的是地址在C语言中,形参值的改变并不能改变实参的值,但形参所指向内容值的改变却能改变实参,这一点非常的重要,是指针传递的精华所在。

3. 指针函数

当函数的返回值为指针类型时,应该尽量不要返回局部变量的指针,因为,局部变量是定义在函数内部,当这个函数调用结束了,局部变量的栈内存也被释放了,因此,不能够正确的得到返回值。实际上,内存已经被释放了,但这个指针的地址已经返回过去了,但是这个地址已经是无效的了,此时,对这个指针的使用是很危险的。

4. 野指针

野指针并不是NULL,而是指向垃圾内存的指针。

有两种情况可以导致野指针:

(1) char* p;

(2)malloc,free

第一种情况是定义指针,但没有给指针赋地址,此时,对指针的使用是很危险的,因为你不知道它指向哪里,是个野指针。

第二种情况,malloc是在堆上分配内存,必须由用户手动释放,当释放之后,指针指向的内存已经释放掉了,但指针本身的地址还存在,即指向了一个无效的内存,所以这时的指针为野指针,必须把这个指针p=NULL.

转自:http://www.360doc.com/content/11/0331/16/621500_106162087.shtml

C++ 值传递、指针传递、引用传递详解

http://www.cnblogs.com/yanlingyin/archive/2011/12/07/2278961.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: