你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

[肚肚分享]神一样的c指针  

[复制链接]
拉肚肚 发布时间:2015-9-6 14:48
今天阅读《C/C++程序员面试指南》中指针一块,以前一知半解的指针问题顷刻间懂了。

下面,可以做个测试,如果下面的指针问题你能够全都解答正确,那么你的C语言功底真是神一般的了。

1.int *p;

2.int **p;

3.int *p[10];

4.int (*p)[10];

5.int *p(int);

6.int (*p)(int);

7.int (*p[10])(int);

这七个难度还不是很大,相信大多数读者都能够答的出来。

答案:

1.一个指向整型数据的指针

2.一个指针的指针,它指向的指针指向一个整型数据

3.一个有十个指针的数组,该指针指向整型数据

4.一个指向有十个整型数据数组的指针

5.就一个函数(不是函数指针),该函数有一个整型参数,返回值为一个指向整型的指针

6.一个函数指针,该函数有一个整型的参数,返回值为整型类型

7.一个有十个指针的数组,该数组中的指针指向一个函数,该函数有一个整型参数并返回一个整型数

啊,当时看完我就吁了口气,真神一般似的,但是但我接着看下去,下面有碰到一个,我彻底崩溃了.......



题目是这样的:

请解析 (*(void (*)())0)() 的含义。// 怎么样?要HOLD住阿!

分析问题:

不卖关子了,但是我早HOLD不住了。书中的答案是这样的,

有些微处理器从0地址启动,有时为了模拟开机时的情形,需要设计一条C 语句,去执行0地址的内容,于是就有了(*(void (*)())0)() 这条语句。

这条语句一眼看上去让人头疼,但分析之后还是挺简单的。

首先,当有如下函数声明时:

void fun(param);

这个函数的调用形式为:fun(param);

题目的函数没有参数,所以就简化成fun();

而0是这个函数的入口地址,即0就是这个函数的指针值,指针的函数声明为:

void (*pFun)(param);

调用形式为:(*pFun)(param);

对于本题可以写成:( *0 ) ();

但是函数指针变量不能是个常数,所以还要把0强制转换成函数指针,根据原题可以元函数的函数指针原型为 void (*)();

于是(*(void (*)())0)()可以这样来分析,首先用void (*)()把0强制转换成了函数指针,然后再调用函数指针0所指向的函数。

可以用typedef来加深对本句的理解,如下:

typedef void (*pFun)();

((*pFun)0)();

这两句和(*(void (*)())0)()是等价的,但是这样更有助于加深对本句的理解。

总结:(*(void (*)())0)()就是 *(void (*)())0 所对应的函数的调用。



神一般的C语言指针.....希望对大家掌握指针有所帮助(*^__^*)
----------------------------------------------------------------------↓↓↓↓↓此位置↓↓↓↓求收藏↓↓↓求支持↓↓↓↓↓
收藏 6 评论30 发布时间:2015-9-6 14:48

举报

30个回答
拉肚肚 回答时间:2015-9-6 14:48:49
占个沙发,求指点。
数码小叶 回答时间:2015-9-6 16:47:59
Inc_brza 回答时间:2015-9-6 16:50:40
没啥神不神的,有基础,多复杂都不怕的,尽管是个柚子,把皮扒多几层,原型也就显露了!别神化这个指针,对自己没多大用处。与其说他神,还不如把他征服,自己当神去吧!
759611 回答时间:2015-9-6 16:53:34
我发现楼主最近发了不少好贴呀!
风子 回答时间:2015-9-6 16:56:26
哦,也就是些基础,谢谢分享
拉肚肚 回答时间:2015-9-6 17:26:46
759611 发表于 2015-9-6 16:53
我发现楼主最近发了不少好贴呀!

我也是从网上复制来的,分享一下
拉肚肚 回答时间:2015-9-6 17:27:02
风子 发表于 2015-9-6 16:56
哦,也就是些基础,谢谢分享

谢谢回复
拉肚肚 回答时间:2015-9-6 17:27:30
Inc_brza 发表于 2015-9-6 16:50
没啥神不神的,有基础,多复杂都不怕的,尽管是个柚子,把皮扒多几层,原型也就显露了!别神化这个指针,对 ...

我觉得指针是C语言独特之处。
拉肚肚 回答时间:2015-9-6 17:27:45

数码宝贝,又看到你了
1234下一页

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版