首頁 > 後端開發 > C++ > 主體

為什麼透過非常量指標修改「const」值會導致未定義的行為,但仍然為指標和原始變數列印不同的值?

Barbara Streisand
發布: 2024-10-28 04:47:02
原創
226 人瀏覽過

Why does modifying a `const` value through a non-const pointer lead to undefined behavior but still print different values for the pointer and the original variable?

透過非常量指標修改const

考慮以下程式碼:

<code class="cpp">const int e = 2;

int* w = (int*) &e;          // (1) cast to remove const-ness
*w = 5;                        // (2)

cout << *w << endl;            // (3) outputs 5
cout << e << endl;             // (4) outputs 2

cout << "w = " << w << endl;   // (5) w points to the address of e
cout << "&e = " << &e << endl;</code>
登入後複製

In (1 ), w 指向e 的地址。在(2)中,該值更改為5。但是,當顯示*w和e的值時,它們的值是不同的。但如果列印指標 w 和 e 的位址,它們的值是相同的。

為什麼 e 變成了 5,還是包含 2?它們是否存放在單獨的位置?還是臨時的?但為什麼w指向的值還是e的位址呢?

回答

一旦修改了const值,就進入了未定義的行為領域。然而,推測:

  • (3) 和 (4): *w 在運行時計算,而 e 被視為編譯時常數。因此,列印的值不同。

以上是為什麼透過非常量指標修改「const」值會導致未定義的行為,但仍然為指標和原始變數列印不同的值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!