免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 5033 | 回复: 24

指针的奇怪用法? [复制链接]

论坛徽章:
0
发表于 2012-01-11 10:13 |显示全部楼层
定义了一个指针变量:
struct globals *ptr_to_globals;

ptr_to_globals = malloc(sizeof(struct globals));
但是很多情况都是写成下面的形式,这是为什么呢?
(*(struct globals**)&ptr_to_globals) = malloc(sizeof(struct globals));

论坛徽章:
0
发表于 2012-01-11 13:24 |显示全部楼层
这两者应该等价啊,但是不太清楚为何要这么用 ......

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
发表于 2012-01-11 14:10 |显示全部楼层
但是很多情况都是写成下面的形式,这是为什么呢?
(*(struct globals**)&ptr_to_globals) = malloc(sizeof(struct globals));


何以得出“很多情况” 啊?

论坛徽章:
0
发表于 2012-01-11 14:17 |显示全部楼层
Busybox?我记得busybox有一些不太好理解的指针用法
所以只看这一段应该看不出用处

论坛徽章:
0
发表于 2012-01-11 14:29 |显示全部楼层
是的,上面举的例子是busybox源码。

#define G (*ptr_to_globals)
#define modinfo             (G.modinfo)
(*(struct globals**)&ptr_to_globals) = malloc(sizeof(struct globals));
这样就可以使用modinfo来使用ptr_to_globals->modinfo的变量。
但是ptr_to_globals = malloc(sizeof(struct globals));
这样也可以使用modinfo来使用ptr_to_globals->modinfo的变量。

论坛徽章:
0
发表于 2012-01-11 16:34 |显示全部楼层
我好想在linux内核中也见过类似

*(type **)&p = xxx;

的用法。。。

但一时不记得具体什么地方,也很奇怪多一层解引用有什么目的...

论坛徽章:
11
未羊
日期:2013-12-16 12:45:4615-16赛季CBA联赛之青岛
日期:2016-04-11 19:17:4715-16赛季CBA联赛之广夏
日期:2016-04-06 16:34:012015亚冠之卡尔希纳萨夫
日期:2015-11-10 10:04:522015亚冠之大阪钢巴
日期:2015-07-30 18:29:402015亚冠之城南
日期:2015-06-15 17:56:392015亚冠之卡尔希纳萨夫
日期:2015-05-15 15:19:272015亚冠之山东鲁能
日期:2015-05-14 12:38:13金牛座
日期:2014-12-04 15:34:06子鼠
日期:2014-10-16 13:40:4715-16赛季CBA联赛之八一
日期:2016-07-22 09:41:40
发表于 2012-01-11 17:03 |显示全部楼层
你确信是 ptr_to_globals = malloc(sizeof(struct globals)); ???
而不是 ptr_to_globals = (struct globals *) malloc(sizeof(struct globals)); ???
至于为什么, 我觉得就是人家不爱写  (struct globals *) malloc(...);

论坛徽章:
0
发表于 2012-01-11 17:10 |显示全部楼层
回复 7# zylthinking


    楼主奇怪的应该是指为什么会将指针再取一次地址,然后解引用再赋值,而不直接赋值。

论坛徽章:
11
未羊
日期:2013-12-16 12:45:4615-16赛季CBA联赛之青岛
日期:2016-04-11 19:17:4715-16赛季CBA联赛之广夏
日期:2016-04-06 16:34:012015亚冠之卡尔希纳萨夫
日期:2015-11-10 10:04:522015亚冠之大阪钢巴
日期:2015-07-30 18:29:402015亚冠之城南
日期:2015-06-15 17:56:392015亚冠之卡尔希纳萨夫
日期:2015-05-15 15:19:272015亚冠之山东鲁能
日期:2015-05-14 12:38:13金牛座
日期:2014-12-04 15:34:06子鼠
日期:2014-10-16 13:40:4715-16赛季CBA联赛之八一
日期:2016-07-22 09:41:40
发表于 2012-01-11 17:12 |显示全部楼层
rocklinux 发表于 2012-01-11 17:10
回复 7# zylthinking


因为不爱那样写, 我说了啊

论坛徽章:
0
发表于 2012-01-11 17:22 |显示全部楼层
回复 9# zylthinking


哦。。

我觉得如果他只是偷懒的话,应该选择一个击键数更少的方式。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP