來自本書:Stephen G Kochan 的“C 語言編程(第 4 版)”
// Basic conversions in C
#include <stdio.h>
int main (void)
{
float f1 = 123.125, f2;
int i1, i2 = -150;
char c = 'a';
i1 = f1; // floating to integer conversion
printf("%f assigned to an int produces %i\n", f1, i1);
f1 = i2; // integer to floating conversion
printf("%i assigned to a float produces %f\n", i2, f1);
f1 = i2 / 100; // integer divided by integer
printf("%i divided by 100 produces %f\n", i2, f1);
f2 = i2 / 100.0; // integer divided by a float
printf("%i divided by 100.0 produces %f\n", i2, f2);
f2 = (float) i2 / 100; // type cast operator
printf("(float) %i divided by 100 produces %f\n", i2, f2);
return 0;
}
我是編程新手,我試圖從上述書中學習如何用 C 編程。我遇到了這段代碼,用于將整數轉換為浮點數,反之亦然。我對實際發生的事情有點困惑。
這是我到目前為止的理解:前幾行(float f1 = 123.135, f2;和接下來的兩行)宣告了變數。
然后該行將i1 = f1;的值分配給123.125命名的變數,i1但由于i1是一個整數,它被截斷為123。
現在,這是我的問題,在下一行中,f1 = i2;該值-150被分配給了命名的變數,f1但由于它是 a float,該值被存盤為浮點數,即,-150.000000但是發生了123.125什么?
該值是否仍然存在于計算機記憶體中的某處?如果是這樣,我該如何訪問它?就像以前將該值分配給 時一樣f1,我可以將它稱為 asf1但現在它不再分配給任何變數,我可以以某種方式參考它嗎?
就像更通用的版本一樣,如果我們為變數分配一個新值,舊值會發生什么?
當我們為變數分配新值時,我對In python進行了觀察,舊值會發生什么? 但是在 C 中也會發生同樣的情況嗎?
uj5u.com熱心網友回復:
在 C 中,變數是一個名稱,用于使一塊記憶體更易于使用。當你給變數賦值時,該值被存盤到與變數名對應的一塊記憶體中。
這意味著在將新值存盤到變數中時,舊值將被覆寫,因為變數仍然參考同一塊記憶體。通常,第一個值不會以任何稍后可以訪問的方式保留。
現在有一些“異國情調”的做事方式可能無法使這個陳述 100% 正確。有寫時復制系統(其中一些是用 C 實作的)在寫入新值時確實保留舊值(在一般意義上)。然而,大多數 C 程式中甚至都沒有這些型別的系統,如果您使用過,您就會知道。
uj5u.com熱心網友回復:
該值是否仍然存在于計算機記憶體中的某處?
一般的答案是:不,一旦您將新值分配給變數,舊值就會消失,因此您無法訪問它。
那說...
根據您的編譯器,初始值設定項(如您的 123.125)可能是程式記憶體的一部分,因此該值可能仍在記憶體中的某處。但是,這并不重要,因為您不知道在哪里,因此無法訪問它。所以對于任何實際用途,它已經消失了......
uj5u.com熱心網友回復:
每當您創建一個變數并為其分配一個值時,它都會存盤在記憶體中,但是當我們更改變數的值時,我們基本上是用新值替換它。因此舊值會從記憶體中洗掉
uj5u.com熱心網友回復:
變數就像一個值的占位符。如果您為變數分配一個新值,則意味著您用新值覆寫舊值,舊值將永遠消失。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/399612.html
上一篇:在快速滑塊中使用封閉范圍的變數
下一篇:在檔案夾中創建文本檔案
