[英]Is casting the same as interpreting in printf(c)
如果我將一個名為“a”的變量類型轉換為另一個名為“b”的變量類型,“b”現在被“a”解釋為新的變量類型。 如果我有一個名為“a”的變量類型,並且我將 printf 與另一種變量類型一起使用,則 output 將被解釋為新變量類型的“a”。 那么 printf 是否正在制作一個隱藏的鑄造工藝來做到這一點?
如果我將一個名為“a”的變量類型轉換為另一個名為“b”的變量類型,“b”現在被“a”解釋為新的變量類型。
不,強制轉換將一個值轉換為另一種類型; 它不會重新解釋變量。 如果a
是值為 3 的int
,則(float) a
是具有相同值 3 的float
。
如果我有一個名為“a”的變量類型,並且我將 printf 與另一種變量類型一起使用,則 output 將被解釋為新變量類型的“a”。 那么 printf 是否正在制作一個隱藏的鑄造工藝來做到這一點?
首先回答第二個問題,不, printf
在這種情況下沒有進行任何轉換。 關於第一個問題,就是某些情況下可能出現的output。 但該行為並未由 C 標准定義。 可能發生的一些事情包括:
a
,但告訴printf
期待另一種類型。 printf
從您放置a
字節的位置獲取參數的字節,但是,因為它需要不同的類型,所以它將字節解釋為使用其他類型的規則進行編碼,因此它將a
的字節重新解釋為新類型。a
,但告訴printf
期待另一種類型。 但是,傳遞這些類型的規則說要在不同的地方傳遞它們。 a
可能在通用處理寄存器中傳遞,但其他類型可能在浮點寄存器中傳遞。 所以printf
從它期望的地方獲取字節,但是a
的字節不存在。 取而代之的是, printf
獲取其他一些恰好在寄存器中的字節,並將它們轉換為打印。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.