2013-05-17 31 views
-2

我有一個接受指向int64的指針並打印該值的函數。現在,如果我從調用函數傳遞一個整數,它會給出原始值加上額外的4個字節,因爲它是一個int64並傳遞整數。我該如何照顧這個,這樣如果我將一個整數傳遞給接受int64的函數,仍然會打印一個整數值。將int傳遞給接受int64作爲輸入參數的函數

void foo(int64_t * temp) // just mentioning a simplified function 
{ 
    printf("%llx\n",*temp); 
} 

如果我試圖通過用值「0×12345678」,則該函數foo的打印出爲「xxxxxxxx12345678」,其中xxx是無用值的值的整數。

更新: 我可以做到這一點通過使用臨時int64變量/指針,並通過它,但我不寧願或不能做到這一點,有沒有其他的方式?

+3

我總是喜歡它,當人們在這裏發佈問題,然後優先拒絕正確的答案。 「請不要告訴我這樣做的正確方法,因爲我不想這樣做,請給我一個可笑的方法來代替它。」 –

+0

這就是多數民衆贊成我一直在告訴誰問了我這個問題的人,但他說有這麼想的問這樣的社區。 – randomuser15995183

+2

我認爲你需要解釋實際的問題,所以我們可以幫助你一個實際的解決方案,而不是問一些無關的問題,並得到可能與你的實際問題無關的答案。 –

回答

1

如果您將某些內容僞裝成編譯器,則所有投注都將關閉。未定義的行爲和所有爵士樂。爲了解決這個問題,創建一個合適的變量,而是用它調用你的函數:

int32_t x = 0x12345678; 
int64_t y = x; 

foo(&y); 

編輯:你說你「不和,而不能」做這種改變,但你必須給你希望它能夠工作。

+0

感謝您的回答卡爾,但我想要一種沒有上述方法的方式。忘記提及我的問題,並相應地更新了問題。 – randomuser15995183

+1

我已經更新了我的答案。你不能。爲什麼你不能以正確的方式做到這一點? –

+0

由於場景涉及很多地方的類似表示,並且由於內存和其他限制而無法在各個地方提供此方法,因此需要其他方法。 更重要的是,這是我的上司給我的限制:)。 – randomuser15995183

1

簡短的回答是否定的 - 你的函數需要一個指向64位值的指針,你必須給它一個這樣的指針。

但是,請注意,示例中根本沒有理由傳遞指針 - 爲什麼不通過值傳遞參數,從而可以接受高達64位的任何整數類型?

void foo(int64_t temp) 
{ 
    printf("%llx\n",temp); 
} 
+0

該函數將修改變量,我剛剛提到了一個簡化函數:) – randomuser15995183

+0

然後,您必須精確地傳遞所需的指針。但是,在這種情況下,您是否可以不返回修改後的值? –

1

如果你必須這樣做,在很多地方,你可以創建一個包裝函數做上述工作適合你,如

void foo_i64(int64_t * temp) // your original function 
{ 
    // do stuff with that pointer 
} 

void foo_i(int * temp) // wrapper function 
{ 
    int64_t t2 = *temp; // copy value 
    foo_i64(&t2); 
    *temp = t2; // copy value back to where we need it. There might be an overflow! 
} 

現在你可以使用包裝函數foo_i()無論你有一個int變量需要修改/處理。

相關問題