调用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;
}
我一眼就能看出以下问题:
让我困惑的是,我不知道可以将原型放在函数体中,所以我错误地认为它是一个从未初始化过的函数的指针。我搜索并找到了另一个库中定义的
atod
函数。代码是正确的
这个doubleValue
错误是我的错误,我试图在向您提出问题时简化问题。实际上,doubleValue
是a函数
的一个参数,并且已经初始化
再次感谢大家。你一直都很快而且很有帮助。
double-atod()
是名为atod的函数的函数原型,它接受未指定数量的参数并返回一个double<代码>双(*atod)()将是指向这样一个函数的指针。函数指针的语法不应该像(*pointername)(parameters)。。。就我所见,doubleValue是指向双变量的指针。。。多布尔原子()。。。逃避我。。。如果这是C++,我会说你正在构建一个双重命名的ATOD。当然,我可能错了。您将获得未定义的行为(很可能是崩溃),因为您在此处取消引用未初始化的指针:*doubleValue=atod(“12.3”),&cc代码>。顺便说一句,atod
定义在哪里?double-atod()代码>是函数原型,不是函数声明,它需要一个未指定的参数。@ MCH,我的坏,C++在这方面是不同的。固定的。