我很努力地處理我在一段C++代碼中的指針。事不宜遲,讓我告訴你我的代碼的一部分:正確取消引用指針
在file1.cpp
void *SomeClass::extract()
{
double foo = 3.14;
return (void*) &foo; // returns the pointer to a double
}
在file2.cpp
void * bar = SomeClass->extract(); // fetches the pointer to a double
fprintf(screen, "pointer address: %p \t value: %.3e \n", bar, (double*) bar);
(由於代碼的龐大的過於簡單化的,有可能是不一致)我基本上想要做的是打印file2.cpp
中的foo
的值,通過調用file1.cpp
中的函數檢索該值。當我比較foo
和bar
的指針地址時,我發現它們是相同的。但是當我想要提取指針時,我得到了僞造。我懷疑我在解引用中做錯了什麼,但是當我將其與代碼的其他部分(我沒有按照自己的方式編寫)進行比較時,它似乎是有效的。
我知道這應該是非常基本的C++,但不知何故它不適合我。如果有人能夠向我解釋如何正確完成,我將非常感激。
的Martijn
*(double *)bar – user3528438
'(double *)'bar僅將條形轉換爲類型爲'double *'的指針。您仍然需要取消引用指針 – mstbaum
您正在返回一個指向堆棧的指針。下一個函數會用什麼來覆蓋它。 –