#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
指針地址++會被與宏關聯起來~會不會是編譯器所為呢