C语言 为什么MPFR初始化函数即使接受未初始化的值并且不返回任何东西而不是使用指针也能工作?

iezvtpos  于 2023-05-16  发布在  其他
关注(0)|答案(2)|浏览(123)

我最近被一个朋友推荐了图书馆MPFR。看着它,我对它应该如何工作感到非常困惑-它完全不符合我对C的理解。要初始化MPFR值,建议编写如下内容:

mpfr_t number;
mpfr_init2(number, 1000);

此函数如何传递其输出?它只接收一个mpfr_t类型的[n](未初始化)值,并且不返回任何值。要想和对方交流就得有指针对吧我首先检查了源代码,看看它是否是一个宏,但它似乎不是(除非__MPFR_DECLSPEC是黑魔法,但它似乎扩展到没有)。
我能想到的唯一可能性是:1)MPFR以某种方式获取mpfr_t的地址(在堆栈上)并直接修改它。但这似乎是不可能的,或者只能通过技术上未定义的行为来实现。2)mpfr_t实际上是一个指针,通过一些奇怪的uninitialized指针被初始化为指向堆栈。但这似乎不太可能。
这到底是怎么回事

7y4bm7vi

7y4bm7vi1#

mpfr_t是大小为1的数组。
因此,如果在表达式中使用数组,则传递指向该数组第一个元素的引用(指针),因为数组会衰减为指针。
这是为什么隐藏typedef背后的指针和数组是一个非常糟糕的主意的“有机”例子之一。

wooyq4lh

wooyq4lh2#

这是第二个选项,mpfr_t实际上是一个数组(指针)。看看它的定义。

相关问题