C語言中變量與其內(nèi)存地址對(duì)應(yīng)的入門知識(shí)簡單講解
先來理解理解內(nèi)存空間吧。請(qǐng)看下圖:
如上圖所示,內(nèi)存只不過是一個(gè)存放數(shù)據(jù)的空間,就好像我的看電影時(shí)的電影院中的座位一樣。電影院中的每個(gè)座位都要編號(hào),而我們的內(nèi)存要存放各種各樣的數(shù)據(jù),當(dāng)然我們要知道我們的這些數(shù)據(jù)存放在什么位置吧。所以內(nèi)存也要象座位一樣進(jìn)行編號(hào)了,這就是我們所說的內(nèi)存編址。座位可以是遵循“一個(gè)座位對(duì)應(yīng)一個(gè)號(hào)碼”的原則,從“第1號(hào)”開始編號(hào)。而內(nèi)存則是按一個(gè)字節(jié)接著一個(gè)字節(jié)的次序進(jìn)行編址,如上圖所示。每個(gè)字節(jié)都有個(gè)編號(hào),我們稱之為內(nèi)存地址。好了,我說了這么多,現(xiàn)在你能理解內(nèi)存空間這個(gè)概念嗎?
我們繼續(xù)看看以下的C/C++語言變量聲明:
int i; char a;
每次我們要使用某變量時(shí)都要事先這樣聲明它,它其實(shí)是內(nèi)存中申請(qǐng)了一個(gè)名為i的整型變量寬度的空間(DOS下的16位編程中其寬度為2個(gè)字節(jié)),和一個(gè)名為a的字符型變量寬度的空間(占1個(gè)字節(jié))。
我們又如何來理解變量是如何存在的呢。當(dāng)我們?nèi)缦侣暶髯兞繒r(shí):
int i; char a;
內(nèi)存中的映象可能如下圖:
圖中可看出,i在內(nèi)存起始地址為6上申請(qǐng)了兩個(gè)字節(jié)的空間(我這里假設(shè)了int的寬度為16位,不同系統(tǒng)中int的寬度可能是不一樣的),并命名為i。a在內(nèi)存地址為8上申請(qǐng)了一字節(jié)的空間,并命名為a。這樣我們就有兩個(gè)不同類型的變量了。
賦值給變量
再看下面賦值:
i = 30; a = 't';
你當(dāng)然知道個(gè)兩個(gè)語句是將30存入i變量的內(nèi)存空間中,將“t”字符存入a變量的內(nèi)存空間中。我們可以利用這樣的形象來理解:
變量在哪里?
即我想知道變量的地址。
好了,接下來我們來看看&i是什么意思?
是取i變量所在的地址編號(hào)嘛。我們可以這樣讀它:返回i變量的地址編號(hào)。你記住了嗎?
我要在屏幕上顯示變量的地址值的話,可以寫如下代碼:
printf("%x", &i);
以上圖的內(nèi)存映象為例,屏幕上顯示的不是i值30,而是顯示i的內(nèi)存地址編號(hào)6了。當(dāng)然,在你的實(shí)際操作中,i變量的地址值不會(huì)是這個(gè)數(shù)了。
這就是我所認(rèn)為的作為初學(xué)者應(yīng)該能夠想象到的變量存儲(chǔ)的實(shí)質(zhì)了。請(qǐng)這樣理解吧。
最后總結(jié)代碼如下:
#include "stdio.h" main() { int i = 5; printf("%d\n", i); /*①*/ printf("%d\n", &i); /*②*/ return(0); }
現(xiàn)在你可知道①、②兩個(gè)printf分別在屏幕上輸出的是i的什么東西啊?
程序運(yùn)行結(jié)果:
5 2686748 Process returned 0 (0x0) execution time : 0.079 s Press any key to continue.
上一篇:關(guān)于C語言程序的內(nèi)存分配的入門知識(shí)學(xué)習(xí)
欄 目:C語言
下一篇:C語言中的結(jié)構(gòu)體的入門學(xué)習(xí)教程
本文標(biāo)題:C語言中變量與其內(nèi)存地址對(duì)應(yīng)的入門知識(shí)簡單講解
本文地址:http://mengdiqiu.com.cn/a1/Cyuyan/2619.html
您可能感興趣的文章
- 04-02c語言函數(shù)調(diào)用后清空內(nèi)存 c語言調(diào)用函數(shù)刪除字符
- 04-02c語言的正則匹配函數(shù) c語言正則表達(dá)式函數(shù)庫
- 04-02func函數(shù)+在C語言 func函數(shù)在c語言中
- 04-02c語言中對(duì)數(shù)函數(shù)的表達(dá)式 c語言中對(duì)數(shù)怎么表達(dá)
- 04-02c語言用函數(shù)寫分段 用c語言表示分段函數(shù)
- 04-02c語言編寫函數(shù)冒泡排序 c語言冒泡排序法函數(shù)
- 04-02c語言沒有round函數(shù) round c語言
- 04-02c語言分段函數(shù)怎么求 用c語言求分段函數(shù)
- 04-02C語言中怎么打出三角函數(shù) c語言中怎么打出三角函數(shù)的值
- 04-02c語言調(diào)用函數(shù)求fibo C語言調(diào)用函數(shù)求階乘


閱讀排行
本欄相關(guān)
- 04-02c語言函數(shù)調(diào)用后清空內(nèi)存 c語言調(diào)用
- 04-02func函數(shù)+在C語言 func函數(shù)在c語言中
- 04-02c語言的正則匹配函數(shù) c語言正則表達(dá)
- 04-02c語言用函數(shù)寫分段 用c語言表示分段
- 04-02c語言中對(duì)數(shù)函數(shù)的表達(dá)式 c語言中對(duì)
- 04-02c語言編寫函數(shù)冒泡排序 c語言冒泡排
- 04-02c語言沒有round函數(shù) round c語言
- 04-02c語言分段函數(shù)怎么求 用c語言求分段
- 04-02C語言中怎么打出三角函數(shù) c語言中怎
- 04-02c語言調(diào)用函數(shù)求fibo C語言調(diào)用函數(shù)求
隨機(jī)閱讀
- 01-10使用C語言求解撲克牌的順子及n個(gè)骰子
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 08-05織夢(mèng)dedecms什么時(shí)候用欄目交叉功能?
- 08-05dedecms(織夢(mèng))副欄目數(shù)量限制代碼修改
- 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置
- 08-05DEDE織夢(mèng)data目錄下的sessions文件夾有什
- 01-11ajax實(shí)現(xiàn)頁面的局部加載
- 01-10C#中split用法實(shí)例總結(jié)
- 01-10delphi制作wav文件的方法
- 04-02jquery與jsp,用jquery