2015-02-24 38 views
1
int bar(const size_t value) { 
    char *d = (char*) value; 
    *d = 'B'; 
} 

int main() { 
    char bar = 'A'; 
    bar((size_t)&d); 
} 
  1. 是使用size_t模擬空指針類型的法律?爲什麼?使用的size_t爲空指針仿真

  2. 它有什麼好處/缺點?

+0

你是什麼意思的法律? – reader 2015-02-24 07:28:20

+0

@reader'size_t'被解釋爲'data *',不是?該函數根據值獲取參數。 – juanchopanza 2015-02-24 07:35:57

+0

@gio:你連接***這個問題。 – alk 2015-02-24 07:45:24

回答

3

對於數據指針,從一個指針到一個整數類型回原始指針類型往返公只要整數類型足夠寬以保持指針而不損失所定義。

size_t已被定義爲保持對象大小。它們通常足夠大以容納指針表示,但不能保證,而且它們是假設不成立的實現。

uintptr_tintptr_t是定義爲足夠寬以容納指針而不丟失的整數類型。

對於函數指針,我知道沒有這樣的保證。