我有一個函數在需要作爲輸入的整數我的C++應用程序。可悲的是這個整數只是一個usigned字符數組,這不由得我做到這一點的形式提供:這兩個演員之間有什麼區別?
unsigned char c[4] = {'1','2','3','4'};
void myFuncThatBadlyNeedsInts(int i)
//compares some memory value(which is an int) with anotherone...
myFuncThatBadlyNeedsInts((int)c);
這給了我一個錯誤,它告訴我,這是不允許的。 但是,如果我決定要棘手,做到這一點:
myFuncThatBadlyNeedsInts(*((int*)&c));
現在程序進入有關,給我總是我想要的結果。我的問題是:爲什麼兩個演員的結果有差異? 難道他們不應該都做同樣的,用之探源我在過程中的兩個三分球不必要的?
幫助或指導的alredy現有的答案,我qustion是非常讚賞。
編輯(因爲我不能評論):需要這個確實無聊的轉換,從一個DWORD至極,其比較特定內存位置(作爲int)一個項目在繼承從FGPA retrived並以數組形式出現。 DWORD最後讀取爲一個十六進制數字。 我會盡力獲得更改,並感謝所有人的快速回復。我真的沒有得到這個程序的部分,我也不明白爲什麼它首先這樣工作。現在我知道有人很幸運
P.S:因爲即時通訊新來的,這是我第一次qustion請讓我知道你可能需要的其他具體或只需編輯我牛逼misshabits了。
雖然我已經回答了你的兩個電話會發生什麼,我不能說你真正應該做的事情,因爲我不知道你真正想做的事。你想將整個數組作爲單個32位整數傳遞嗎?只傳遞數組中的一個元素?請詳細說明您嘗試解決的*實際*問題([關於XY問題的相關閱讀](http://xyproblem.info/))。 –
這是爲什麼在C和C++中存在聯合概念的一個更好的原因 - 它允許你真正地告訴編譯器你在做什麼。現在你欺騙它變成做颼權..... – tofro
@tofro使用工會辦[*類型雙關*](https://en.wikipedia.org/wiki/Type_punning)在C行不行,但不是在C(它明確地在說明書中提及)++其中它違反了[*串混疊規則*](http://stackoverflow.com/questions/98650/what-is-the-strict-aliasing-rule)。 –