程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 徹底搞定C語言指針 第一篇

徹底搞定C語言指針 第一篇

編輯:關於C語言

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 !(待續…)

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