程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> 內存空間-C++中關於const的一個問題

內存空間-C++中關於const的一個問題

編輯:編程綜合問答
C++中關於const的一個問題
#include <iostream>
using namespace std;

int main()
{
    const i=10;
    int j;
    int *p=&j;
    p++;
    *p=20;  //為什麼不能修改i的值?
    j=i;
    cout<<p<<"    "<<*p<<endl;
    cout<<&i<<"   "<<i<<endl;
    cout<<&j<<"   "<<j<<endl;
    return 0;
}

結果是:

0012FF44   20  //為什麼同一內存空間會有兩個不同的值?
0012FF44   10
0012FF40   10

問題:為什麼同一內存空間會有兩個不同的值?

最佳回答:


這題很有意思~

守先const是修飾常量直接修改肯定不允許,那就成變量了
你的地址看似相同,其實不同,這其中奧妙我也不是很清楚,可能是編譯器所為
一切源頭在於你改變指針地址p++
我測試了一下,得到的經驗是:
1:如果你p++;將造成斷鏈,後再賦值 *p=13;

const int i=10;
int j;
int *p=&j;
p++;//去掉正常
*p= 13;

cout<<p<<" "<<*p<<endl;  //XXXX44 13
cout<<&i<<" "<<i<<endl;  //XXXX44 10 
cout<<&j<<" "<<j<<endl;  //XXXX40 -85899393837

2:p++;意味著地址跳轉了,雖然我也覺得該是地址加1,但實際測不是這樣
規律是,p++;的次數既是跳轉到常量倒序的常量值,見代碼說明

const int xyz=3333;
const int i=123;
int j=321;
int *p=&j;
p++;//只加一次的時候就123
p++;//如果還要加第三次,因為常量只定義2次,所以只能+2次,否則跳到混亂隨機地址
cout<<p<<" "<<*p<<endl; //...  3333
cout<<&j<<" "<<*j<<endl; //...  321

指針地址++會被與宏關聯起來~會不會是編譯器所為呢

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved