博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
理解函数指针(一)
阅读量:7096 次
发布时间:2019-06-28

本文共 1007 字,大约阅读时间需要 3 分钟。

1.直接调用函数

void fun(int x); //此处的声明也可写成:void fun( int );int main(int argc, char* argv[]){    fun(10); //调用函数    return 0;}/*定义*/void fun(int x){    printf(“%d\n”,x);}

 

2.函数指针

void fun(int x); //也可写成:void fun( int );void (*fp)( int ); //声明一个函数指针,也可声明成void(*fp)(int x),但一般不这样。int main(int argc, char* argv[]){   fun(10); //直接调用   fp=&fun; //将fun函数的地址赋给fp指针变量,如果上边没声明,可以直接void (*fp)(int) = &fun;   (*fp)(20); //通过函数指针变量fp调用。}/*fun函数*/void fun(int x) {   printf(“%d\n”,x);}

其实fun函数名是fun函数的头指针,区别是fun是指针常量,而fp是指针变量。和数组的头指针一样的意思。

所以也可以这样写:

void fun(int x); //也可写成:void fun( int );void (*fp)( int ); //也可申明成void(*fp)(int x),但一般不这样。int main(int argc, char* argv[]){   (*fun)(10); //直接调用,函数名的指针方式   fp=fun; //不用加&,   fp(20); //函数指针的函数名一样的方式}/*fun函数*/void fun(int x) {   printf(“%d\n”,x);}

因为fun也是函数的头指针,所以(*fun)(10)方式也可以,因为这样写不方便,C语言设计者才设计成fun(10)的方式,所以指针变量fp(10)的方式也是OK的。

把函数地址赋值给fp时,加不加&都是一样的效果,都是把函数头地址赋值给fp。可通过gdb检测。我测试了。

注意:

在声明时:

void fun( int );    //不能写成void (*fun)( int )。

void (*fp)( int );   //不能写成void fp( int )。

转载地址:http://vhhql.baihongyu.com/

你可能感兴趣的文章
逛论坛时发现 有关 递归调用
查看>>
JavaScript的3大组成部分&&ECMAScript函数&&闭包
查看>>
.NET Core 跨平台发布(dotnet publish)
查看>>
OpenAcc社区版安装教程(Linux版)(更新版)
查看>>
java写入文件的几种方法
查看>>
NGINX模块(一)
查看>>
Linux service命令
查看>>
Linux动态频率调节系统CPUFreq之二:核心(core)架构与API
查看>>
TCP发送源码学习(2)--tcp_write_xmit
查看>>
Android第三方开源图片裁剪截取:cropper
查看>>
C# 中英文符号互转
查看>>
asp.net2.0安全性(3)--验证与授权--转载来自车老师
查看>>
RegexKitLite 正则
查看>>
for/F命令详解
查看>>
swift -- 类和结构体
查看>>
微软是如何重写C#编译器并使它开源的
查看>>
python 面向对象 反射
查看>>
python文件操作
查看>>
PHP代码格式化批量脚本
查看>>
无需用户确认关闭当前网页
查看>>