大家好!从今天起,我将把我对于C,C++学习中的一些总结体会以博客的形式变现出来。希望跟大家一起交流,指出我的不足和错误,一起进步。我要感谢近期来指导我的老师们,最近学到的东西,真的很多。好了,下面就开始吧。
关于C语言,指针那一块内容,我想会令很多人头疼吧。以前听人家说过这么一句话,“C语言行不行,就看你指针用的溜不溜。”的确,指针的用法很灵活,今天我要说的就是我对于“指针函数”与“函数指针”的一些体会总结。可能有没提到的,希望大家提醒。
1.“函数指针”
从它的字眼我们可以看出来,它是一个指针,指向一个函数。那么我们就疑惑了,指针指向函数是怎么实现的呢?
原来在一个程序运行过程中,函数代码执行算法指令,它也占据一定的内存空间。那么自然,它就会有相应地址。而我们的函数指针,其实,指向的就是这个函数的相应的首地址。这样,我们会自然而然的引出函数指针的赋值问题,下面以例子说明:
#include<stdio.h>
int Add(int a,int b) //定义一个函数,求两个×××数之和
{
return a+b;//返回两数之和
}
int main()
{
int (*p)(int ,int) = NULL;//定义一个函数指针,函数返回类型为int型,形参为两个整型数
p = Add;//这里,我们将函数Add的首地址赋值给指针变量p
printf("a+b=%d\n",p(3,6));
return 0;
}
最后,运行结果为a+b=9;
至此我们可以发现,函数指针调用函数,其实就是通过指针指向函数首地址调用函数的。定义函数指针的一般格式为:
函数类型(*指针变量名)(形参列表);
2.“指针函数”
还是一样,从字面义上看,它是一个函数。而“指针”是指这个函数的返回是指针类型。
接上面说的“函数指针”,指针函数一般格式为:
类型标识符 *函数名(参数表)
举个使用指针函数的简单例子:
#include<stdio.h>
char *Show(char str[2])//定义的指针函数
{
str[0]='a';//把数组首元素设置为字符a
return(str);//返回值
}
int main()
{
char str[2];
gets(str);
printf("%s\n",Show(str));
return 0;
}
结果实现:输入c,d
输出结果为a,d