调用C t中的函数的未初始化变量

调用C t中的函数的未初始化变量,c,initialization,function-pointers,C,Initialization,Function Pointers,我有以下情况: int aFunction() { int cc; double *doubleValue; double atod(); *doubleValue = atod ("12.3", &cc); } 据我所知,atod是一个指向函数的指针,它返回一个double,当调用atod时,它似乎没有初始化 我说得对吗?当此代码在生产环境中运行时,会发生什么情况?函数指针如下所示: double (*atod)(); 你拥有的是一个原型。

我有以下情况:

int aFunction() {
    int    cc;
    double *doubleValue;
    double atod();

    *doubleValue = atod ("12.3", &cc);

}
据我所知,
atod
是一个指向函数的指针,它返回一个
double
,当调用
atod
时,它似乎没有初始化


我说得对吗?当此代码在生产环境中运行时,会发生什么情况?

函数指针如下所示:

double (*atod)();
你拥有的是一个原型。如果你把它放在你的功能之外,你会认识到它:

double atod();

int aFunction() {
    int    cc;
    double *doubleValue = malloc(sizeof(double));

    *doubleValue = atod ("12.3", &cc);
}
编译器/链接器只是从其他地方查找
atod
函数

我不知道为什么有人会选择这样做,而不是包括适当的头文件


(我假设未初始化的
double*
错误是由于您减少了示例造成的。)

立即从生产中删除该代码

您正在取消对未初始化指针的引用并获得未定义的行为:

double *doubleValue;
*doubleValue = ...
无论如何,这:

double atod();
是函数的原型,该函数接受未指定数量的参数(如果未在别处定义,则可能导致链接错误)并返回双精度。要获得函数指针,您应该编写:

double function() {
    return 2.0;
}

int main()
{
    double (*atod)(); // Pointer to function
    atod = &function;
}

我一眼就能看出以下问题:

  • doubleValue是一个指针。在尝试取消引用atod()结果并将其分配到之前,必须在下面分配内存
  • atod()应该在某些库中实现(或从共享库导入),否则您的代码将被编译,将不会链接

  • 让我困惑的是,我不知道可以将原型放在函数体中,所以我错误地认为它是一个从未初始化过的函数的指针。我搜索并找到了另一个库中定义的
    atod
    函数。代码是正确的

    这个
    doubleValue
    错误是我的错误,我试图在向您提出问题时简化问题。实际上,
    doubleValue
    a函数
    的一个参数,并且已经初始化


    再次感谢大家。你一直都很快而且很有帮助。

    double-atod()
    是名为atod的函数的函数原型,它接受未指定数量的参数并返回一个double<代码>双(*atod)()将是指向这样一个函数的指针。函数指针的语法不应该像(*pointername)(parameters)。。。就我所见,doubleValue是指向双变量的指针。。。多布尔原子()。。。逃避我。。。如果这是C++,我会说你正在构建一个双重命名的ATOD。当然,我可能错了。您将获得未定义的行为(很可能是崩溃),因为您在此处取消引用未初始化的指针:
    *doubleValue=atod(“12.3”),&cc。顺便说一句,
    atod
    定义在哪里?
    double-atod()是函数原型,不是函数声明,它需要一个未指定的参数。@ MCH,我的坏,C++在这方面是不同的。固定的。