簡體   English   中英

如何將 int 指針轉換為浮點指針

[英]How to cast int pointer to float pointer

我正在針對包含許多類似於以下類型的強制轉換的庫運行 cppcheck (c++11):

// Allocates various buffers
int*   i_buffer = (int*)   calloc (500, sizeof (int));
float* f_buffer = (float*) i_buffer;

對於這些演員表,我看到以下消息:

“可移植性”、“invalidPointerCast”、“在具有不兼容二進制數據表示的整數 * 和浮點 * 之間進行轉換。”

執行上面顯示的類型轉換的正確方法是什么? 以上面顯示的方式投射指針的潛在后果是什么?

如何將 int 指針轉換為浮點指針

使用重新解釋強制轉換。

但是不要嘗試這樣做,因為重新解釋的指針將沒有用。

執行上面顯示的類型轉換的正確方法是什么?

顯示的演員表本身已經很好地定義了; 做這樣的演員只是沒有用。

如果您需要分配一個浮點數組,您可以使用以下代碼:

std::vector<float>(500);

嚴格來說,由於嚴格的別名違規,您的代碼的行為是未定義的。

在實踐中,如果intfloat的大小相同(它們在許多桌面平台上,盡管有一些推動將int移動到 64 位),那么代碼將運行而不會出錯。 雖然再次重申,從標准 C++ 的角度來看,絕對不能保證這一點。

但你仍然應該修復它。 直接分配float組是明智的做法:

float* f_buffer = (float*) calloc (500, sizeof (float));

使用 new 舊式 C 數組(這是 C++ 標准)也是合法的:

float* f_buffer = new float[500];

請注意將該內存的釋放調整為:

delete [] f_buffer;

應始終避免類型轉換以保持代碼整潔並允許編譯器驗證代碼的正確性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM