c语言函数名本质是指针,C语言惊呆系列(一):函数名的本质和函数指针

核能预警:我相信本文的C语言代码,除非是像我一样万里挑一的高手,否则你绝对没有见过!

函数的本质是一段可执行代码段。

函数名,则是指向这段代码段的首地址。

函数类型的基本格式:返回值 (

\ast

∗p)(参数);

例1:第一种玩法,这段C语言代码肯定会让你的小伙伴们都惊呆了!

9d82efaf7e601dbab3e777a92ad2fec2.png

附例1代码:

//小问学编程

#include

void print()

{

printf("调用了print函数\n");

return;

}

int main()

{

((void (*)(void))0x00401340)();

return 0;

}

例2:类似的C语言代码

e03651dea7e63cea10ab020bedc41246.png

附例2代码:

//小问学编程

#include

int main()

{

int a=100;

printf("打印a:%d\n",*(int*)0x0061fefc);

return 0;

}

例3:用来解释例1和例2的C语言代码

77238f0568d409a168503fec85e354d4.png

附例3代码:

//小问学编程

#include

void print()

{

printf("调用了print函数\n");

return;

}

int main()

{

int a=100;

printf("第一次打印a:%d\n",a);

printf("a的地址是:%p\n",&a);

printf("第二次打印a:%d\n",*(int*)0x0061fefc);

printf("\n");

print();

printf("print的地址是:%p\n",print);

((void(*)(void))0x00401340)();

return 0;

}

所以,函数在内存中是有地址的,函数名对应着函数的首地址,既然有地址,就可以定义指针储存地址或更改指针的指向,存储函数(首)地址的指针,称为函数指针。

例4:多种玩法:只要掌握了函数类型的基本格式这个原理就可以写出下述可以正常运行的C语言代码。

67ae0dbf5364f1c72c88f69b5216cabc.png

运行结果:

d164c8ab124d059661302910db36655e.png

附例4代码:

//小问学编程

#include

void print()

{

printf("调用了print函数\n");

return;

}

int main()

{

//void (*p)(void)函数类型的基本格式

//第一种玩法

((void (*)(void))0x00401340)();

//第二种玩法

void (*p1)(void)=print;

p1();

//第三种玩法(不推荐)

void (*p2)(void)=&print;

(*p2)();

//第四种玩法

typedef void (*PF)(void);

PF pf=print;

pf();

return 0;

}

标签:return,函数,int,void,C语言,printf,print,函数指针,惊呆

来源: https://blog.csdn.net/weixin_43297891/article/details/112060594

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值