簡體   English   中英

與 printf(c) 中的解釋相同

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM