我最近被一个朋友推荐了图书馆MPFR。看着它,我对它应该如何工作感到非常困惑-它完全不符合我对C的理解。要初始化MPFR值,建议编写如下内容:
mpfr_t number;
mpfr_init2(number, 1000);
此函数如何传递其输出?它只接收一个mpfr_t
类型的[n](未初始化)值,并且不返回任何值。要想和对方交流就得有指针对吧我首先检查了源代码,看看它是否是一个宏,但它似乎不是(除非__MPFR_DECLSPEC
是黑魔法,但它似乎扩展到没有)。
我能想到的唯一可能性是:1)MPFR以某种方式获取mpfr_t
的地址(在堆栈上)并直接修改它。但这似乎是不可能的,或者只能通过技术上未定义的行为来实现。2)mpfr_t
实际上是一个指针,通过一些奇怪的uninitialized指针被初始化为指向堆栈。但这似乎不太可能。
这到底是怎么回事
2条答案
按热度按时间7y4bm7vi1#
mpfr_t
是大小为1的数组。因此,如果在表达式中使用数组,则传递指向该数组第一个元素的引用(指针),因为数组会衰减为指针。
这是为什么隐藏
typedef
背后的指针和数组是一个非常糟糕的主意的“有机”例子之一。wooyq4lh2#
这是第二个选项,mpfr_t实际上是一个数组(指针)。看看它的定义。