我有以下情況:調用未初始化的變量,在C t的函數
int aFunction() {
int cc;
double *doubleValue;
double atod();
*doubleValue = atod ("12.3", &cc);
}
據我瞭解atod
是指向一個功能,它返回一個double
,它似乎是,當atod
被調用,它不被初始化。
對嗎?這段代碼在生產中運行時會發生什麼?
我有以下情況:調用未初始化的變量,在C t的函數
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。爲了有一個函數指針,你應該寫相當:
double function() {
return 2.0;
}
int main()
{
double (*atod)(); // Pointer to function
atod = &function;
}
'double atod();'是一個函數原型,而不是一個函數聲明,它需要一個未指定數量的參數。 – mch 2014-11-04 12:54:30
@mch我的不好,C++在這方面是不同的。 – 2014-11-04 12:55:54
主要有以下的問題,我可以從第一眼看到:
讓我困惑的是我不知道可以將原型放在函數體內,所以我錯誤地認爲它是一個從未初始化的函數的指針。我搜索並找到在另一個庫中定義的atod
函數。代碼是正確的。
doubleValue
錯誤是我的錯誤,試圖簡化將問題呈現給您的問題。實際上doubleValue
是aFunction
的一個參數,並且已經被初始化。
再次感謝大家。你一直很快,很有幫助。
'double atod();'是一個名爲atod的函數函數原型,它接受一個未指定數量的參數並返回一個double。 'double(* atod)();'是指向這樣一個函數的指針。 – mch 2014-11-04 12:47:01
函數指針的語法不應該像(* pointername)(參數)...就我所知,doubleValue是一個指向雙變量的指針... doble atod()...逃離我。 ..如果這是C++,我會說你正在構建一個雙名爲atod。當然,我可能是錯的。 – 2014-11-04 12:48:25
由於您在此處取消引用未初始化的指針,您將會得到未定義的行爲(最有可能是崩潰):'* doubleValue = atod(「12.3」,&cc);'.BTW'atod'定義在哪? – 2014-11-04 12:48:37