1.語言中變量的實質
要理解C指針,我認為一定要理解C中“變量”的存儲實質, 所以我就從“變量”這個東西開始講起吧!
先來理解理解內存空間吧!請看下圖:
內存地址→ 6 7 8 9 10 11 12 13
-----------------------------------------------------------------
。。。 | | | | | | | |.。
------------------------------- ----------------------------------
如圖所示,內存只不過是一個存放數據的空間,就好像我 的看電影時的電影院中的座位一樣。每個座位都要編號,我們的內存要存放各種各樣的數據,當然我們 要知道我們的這些數據存放在什麼位置吧!所以內存也要象座位一樣進行編號了,這就是我們所說的內 存編址。座位可以是按一個座位一個號碼的從一號開始編號,內存則是按一個字節一個字節進行編址, 如上圖所示。每個字節都有個編號,我們稱之為內存地址。好了,我說了這麼多,現在你能理解內存空 間這個概念嗎?
我們繼續看看以下的C、C++語言變量申明:
int I;
char a;
每次我們要使用某變量時都要事先這樣申明它,它其實是內存中申請了一個名為i的整型變量寬 度的空間(DOS下的16位編程中其寬度為二個字節),和一個名為a的字符型變量寬度的空間(占一個字 節)。
我們又如何來理解變量是如何存在的呢。當我們如下申明變量時:
int I;
char a;
內存中的映象可能如下圖:
內存地址→ 6 7 8 9 10 11 12 13
----------------------- -------------------------------------------
。。。| | | | | | | |.。
------------------------------------------------------------------
變量名|→i ←|→a ←|
圖中可看出,i在內存起始地址為6上申請了 兩個字節的空間(我這裡假設了int的寬度為16位,不同系統中int的寬度是可能不一樣的),並命名為 i. a在內存地址為8上申請了一字節的空間,並命名為a.這樣我們就有兩個不同類型的變量了。
2.賦值給變量
再看下面賦值:
i=30
a=‘t’
你當然知 道個兩個語句是將30存入i變量的內存空間中,將‘t’字符存入a變量的內存空間中。我們可 以這樣的形象理解啦:
內存地址→ 6 7 8 9 10 11 12 13
------------------------------------------------ -----------------------
。。。 | 30 | ‘t’ | | | | |.。
-------------------------------------------------------------------- ---
|→i ←|→a ←|
3.變量在哪裡?(即我想知道變量的地 址)
好了,接下來我們來看看&i是什麼意思?
是取i變量所在的地址編號嘛!我們可 以這樣讀它:返回i變量的地址編號。你記住了嗎?
我要在屏幕上顯示變量的地址值的話,可以 寫如下代碼:
printf(“%d”,&i);
以上圖的內存映象所例,屏幕上 顯示的不是i值30,而是顯示i的內存地址編號6了。當然實際你操作的時,i變量的地址值不會是這個數 了。
這就是我認為作為初學者們所應想象的變量存儲實質了。請這樣理解吧!
最後總結代碼如下:
int main()
{
int i=39;
printf(“%d\n”,i); //①
printf(“%d\n”, &i); //②
}
現在你可知道 ①、②兩個printf分別在屏幕上輸出的是i的什麼東西啊?
好啦!下面我們就開始真正進入指針 的學習了。Come on !(待續…)