2015-10-08 166 views
-1

我能確定數據轉換總是成功嗎?如果我有一個int並且我使用mmap(2),那麼int轉換爲off_tsize_t?爲什麼有這些不同的尺寸?有轉換功能嗎?C數據類型轉換

+2

您絕對不能確定轉換總是成功。例如,如果無法用新類型表示值,則整數類型到浮點類型以及從浮點到整數的轉換會導致未定義的行爲。 – EOF

+0

您能確定轉換總是成功嗎?不,在你的具體例子中,'off_t'甚至不是標準的C,它是POSIX。雖然'size_t'和'int'都保證至少有16位。 –

+1

另外,由_「爲什麼有所有這些不同大小?」,你是什麼意思?你的意思是爲什麼不同類型的尺寸不一樣,或者爲什麼會有不同的類型,或者......? –

回答

2

因爲mmap返回一個指針,所以我不確定你正在做的mmap函數的用法。

  • 關於轉換就可以在任何變量基本上轉化爲利用鑄造任何東西,但它是你的責任,以驗證這將例如工作:

    int i; 
    double d;  
    d = 42.3; 
    i = (int)d; 
    printf("i = %d", i); 
    

輸出將是42,沒有鑄造(int)一些編譯器可能會抱怨並警告你,你將失去浮動精度。

  • 關於爲什麼所有這些不同的尺寸,第一件事size_t是代表大小,所以你可以非常認爲它是一個unsigned int,關於爲什麼不使用unsigned int,而不是一個Typedef的「爲size_t」 ,看到這個職位unsigned int vs size_t
+0

好吧,但是因爲我不知道'off_t'是如何定義的,所以我可能會插入一個不適合'off_t'的值。假設我將'size_t'定義爲64位,並且我想將它分配給定義爲32位的'off_t',如果'size_'t被保存在33位上會發生什麼? – Kouros