国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

C語言中各類地址的含義及運(yùn)用

2018-01-04 11:06崔孝鳳
電腦知識(shí)與技術(shù) 2018年30期
關(guān)鍵詞:存儲(chǔ)單元數(shù)據(jù)類型數(shù)組

崔孝鳳

摘要:針對(duì)C語言中的各類地址進(jìn)行了討論,提出了深入理解C語言的各類地址的存儲(chǔ)原理能夠更好地理解和學(xué)習(xí)C語言,對(duì)初學(xué)者具有很好的啟發(fā)和引領(lǐng)作用。

關(guān)鍵詞:C語言;地址;存儲(chǔ)單元;數(shù)據(jù)類型;數(shù)組

中圖分類號(hào):G642 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2018)30-0232-02

對(duì)于初學(xué)C語言的同學(xué)來說,C語言的地址可謂一大難點(diǎn),如何正確地理解C語言中的各種地址關(guān)系到對(duì)不同數(shù)據(jù)類型的使用,直接關(guān)系到編程質(zhì)量,本文從C語言地址的含義、應(yīng)用等方面解析,對(duì)C語言學(xué)習(xí)者起到啟發(fā)和引領(lǐng)作用。

1 C語言地址的基本概念

C語言地址,是指內(nèi)存地址的概念。計(jì)算機(jī)內(nèi)存中的各個(gè)存儲(chǔ)單元都是有序的,按字節(jié)編碼,這個(gè)編碼就是地址,可以把存儲(chǔ)單元的地址形象地理解成我們房屋的門牌號(hào)。

2 C語言中的地址種類

C語言的數(shù)據(jù)類型非常豐富,不同類型的變量所占的存儲(chǔ)單元大小是不一樣的,下面具體解析一下。

1)整型變量的地址

C語言中的整型變量可以分為短整型short int、基本整型int及長整型long int三種類型,這三種類型所占的內(nèi)存單元字節(jié)數(shù)是不一樣的,短整型變量一般是占用2個(gè)字節(jié),后面兩種一般是占用4個(gè)字節(jié),可以使用關(guān)鍵字sizeof返回,如可以使用語句printf("%d %d %d\n",sizeof(short int),sizeof(int),sizeof(long int));來返回這三種數(shù)據(jù)類型的變量所占的內(nèi)存字節(jié)數(shù)。

2)實(shí)型變量的地址

C語言中的實(shí)型變量可以分為單精度實(shí)型float、雙精度實(shí)型double及長雙精度實(shí)型long double三種類型,在內(nèi)存中分別占用4、8、16個(gè)字節(jié),可以使用語句printf("%d %d %d\n",sizeof(float),sizeof(double),sizeof(long double)); 來返回這三種數(shù)據(jù)類型的變量所占的內(nèi)存字節(jié)數(shù)。

3)字符型變量的地址

C語言中的字符型變量就是char,占用1個(gè)字節(jié)??梢允褂谜Z句printf("%d\n",sizeof(char));來返回一個(gè)字符型變量在內(nèi)存中所占的字節(jié)數(shù)。

4)數(shù)組的地址

C語言中的數(shù)組存儲(chǔ)的是同一種類型的數(shù)據(jù),它們的存儲(chǔ)單元是連續(xù)的一片存儲(chǔ)空間。一個(gè)數(shù)組所占單元的多少既跟數(shù)組的數(shù)據(jù)類型有關(guān)系,也跟數(shù)組的大小密切相關(guān),比如如果有這樣的定義int a[10];那么數(shù)組a所占空間就應(yīng)該是10*4即40個(gè)字節(jié),可以使用語句printf("%d\n",sizeof(a));來輸出數(shù)組a所占的內(nèi)存單元所占字節(jié)數(shù),確實(shí)是40個(gè)字節(jié)。如果是double a[10];呢,顯然數(shù)組a所占內(nèi)存空間就應(yīng)該是10*8即80個(gè)字節(jié),所以數(shù)組在使用前一定首先要定義好,這是很明顯的道理。這兒需要說明一下的是數(shù)組的首地址,C語言中規(guī)定數(shù)組名表示了數(shù)組的首地址,即對(duì)于數(shù)組a來說,a就相當(dāng)于&a;[0],所以由此我們?cè)诰幊讨芯涂梢院芊奖愕卦L問到數(shù)組中的所有元素。

5)指針的地址

C語言的指針可以說是C語言的靈魂所在,我們說指針就是地址,那么指針也是C語言的一種數(shù)據(jù)類型,它的地址占幾個(gè)字節(jié)呢?不管指針指向什么類型的變量,它所占的內(nèi)存空間都是8個(gè)字節(jié)(說明:一般編譯器會(huì)把指針的長度定義為系統(tǒng)的字長),比如int i,*pi=&i;;

char ch,*pch=&ch;; double f,*pf=&f;; printf("%d\n",sizeof(pi)); printf("%d\n",sizeof(pch)); printf("%d\n",sizeof(pf));我們都會(huì)得到相同的結(jié)果8。

3 C語言中不同地址的應(yīng)用

1)基本數(shù)據(jù)類型地址的應(yīng)用

C語言的基本數(shù)據(jù)類型是指基本整型int、實(shí)型float和字符型char,對(duì)于這三種基本類型,當(dāng)定義變量時(shí)系統(tǒng)就會(huì)給它們分配相應(yīng)的內(nèi)存單元,對(duì)它們進(jìn)行賦值等操作時(shí),系統(tǒng)會(huì)直接從相應(yīng)的內(nèi)存單元地址中取出相應(yīng)的值直接進(jìn)行操作。對(duì)于編程者來說,此時(shí)感覺不到地址的作用,其實(shí)地址隨時(shí)在起作用,比如下面的程序例子。

#include

int main(void)

{int a;

printf("請(qǐng)輸入一個(gè)整數(shù):\n");

scanf("%d",&a;);

a=a+1;

printf("a=%d\n",a);

return 0;

}

從一開始定義變量a,系統(tǒng)首先給變量a分配內(nèi)存地址,然后使用scanf輸入數(shù)據(jù),輸入的數(shù)據(jù)保存到了變量a的內(nèi)存地址中,當(dāng)執(zhí)行語句a=a+1;進(jìn)行運(yùn)算時(shí)系統(tǒng)會(huì)首先從變量a的相應(yīng)存儲(chǔ)地址單元中取出變量a的值,運(yùn)算完后再把結(jié)果保存到變量a的存儲(chǔ)單元中,最后使用printf輸出變量的值時(shí)也需要從變量的存儲(chǔ)單元中取出變量a的值。所以整個(gè)程序執(zhí)行過程中一直在使用變量a的地址,不過用戶渾然不覺罷了。

2)數(shù)組地址的應(yīng)用

C語言中的數(shù)組是一組名稱相同類型相同的數(shù)據(jù)的集合,數(shù)組名稱代表了數(shù)組的起始地址,一旦定義數(shù)組,系統(tǒng)就給該數(shù)組分配一片連續(xù)的相應(yīng)的存儲(chǔ)空間。對(duì)數(shù)組的使用其實(shí)就是對(duì)數(shù)組元素的各種操作,既可以使用下標(biāo)元素的方式使用,也可以使用地址的方式,使用下標(biāo)方式對(duì)初學(xué)者來說更好理解,使用地址方式更接近地址本質(zhì),編程者可以根據(jù)自己的喜好選擇喜歡的方式。

請(qǐng)看下面的程序:

程序功能:從鍵盤上輸入10個(gè)整數(shù),然后再在屏幕上輸出來。

程序源代碼如下:

#include

int main(void)

{int a[10],i;

printf("請(qǐng)輸入10個(gè)整數(shù),用空格分隔:\n");

for(i=0;i<10;i++)

scanf("%d",&a;[i]);//或者使用語句:scanf("%d",a+i);

printf("您剛才輸入的10個(gè)整數(shù)如下:\n");

for(i=0;i<10;i++)

printf("%d ",*(a+i));//或者使用語句:printf("%d ",a[i)]);

return 0;

}

說明:輸入數(shù)據(jù)scanf("%d",&a;[i]);時(shí)使用的是對(duì)數(shù)組元素直接訪問的方式,輸出數(shù)據(jù)printf("%d ",*(a+i));時(shí)使用的是對(duì)數(shù)組元素間接訪問的方式,其中a+i表示的就是第i個(gè)元素的地址,利用間接取值運(yùn)算符*取出數(shù)組元素的值。

如果在程序中加一行代碼依次輸出10個(gè)數(shù)組元素的地址的話,如:

for(i=0;i<10;i++)

printf("%d ",a+i);

可能會(huì)看到如下的結(jié)果:

6487584 6487588 6487592 6487596 6487600 6487604 6487608 6487612 6487616 6487620

從這個(gè)結(jié)果可以清楚地看出,數(shù)組的地址是連續(xù)的,每相鄰兩個(gè)元素的地址相差4個(gè)字節(jié),正好是int型變量在內(nèi)存中所占字節(jié)數(shù),顯然,如果是字符型的話,每兩個(gè)元素之間相差的地址就應(yīng)該是1個(gè)字節(jié),我們可以方便地驗(yàn)證。就是說,不同類型的數(shù)組,每個(gè)元素所占的地址空間是跟所屬類型相對(duì)應(yīng)的。從這個(gè)例子我們進(jìn)一步明白C語言中的數(shù)據(jù)的確是存儲(chǔ)在相應(yīng)內(nèi)存單元中的。

4 結(jié)論

C語言中每一個(gè)變量和函數(shù)都對(duì)應(yīng)著相應(yīng)的地址,正確理解各類地址有利于對(duì)C語言更深入的理解和掌握,相信本文對(duì)地址的探討對(duì)初學(xué)C語言的讀者能夠起到一定的啟發(fā)和引領(lǐng)作用。

參考文獻(xiàn):

[1] 劉林香,許燕青. 談C語言中指針、地址和數(shù)組的相互關(guān)系[J].硅谷,2009-01-23.

[2] 郭偉剛. C語言教學(xué)中運(yùn)用printf函數(shù)幫助學(xué)生理解地址和指針[J]. 計(jì)算機(jī)教育,2008-12-10.

[3] 陸云飛. 淺談C語言數(shù)據(jù)與內(nèi)存分配空間和地址的聯(lián)系[J].科技信息,2006-08-05.

[4] 楊延玉. C語言中的地址類型[J]. 平原大學(xué)學(xué)報(bào),2005-12-20.

[5] 魏力生,朱方洲. 談如何掌握C語言中數(shù)組、指針與地址相互關(guān)系[J].電腦知識(shí)與技術(shù),2003-04-15.

【通聯(lián)編輯:王力】

猜你喜歡
存儲(chǔ)單元數(shù)據(jù)類型數(shù)組
一種28 nm工藝下抗單粒子翻轉(zhuǎn)SRAM的12T存儲(chǔ)單元設(shè)計(jì)
JAVA稀疏矩陣算法
詳談Java中的基本數(shù)據(jù)類型與引用數(shù)據(jù)類型
JAVA玩轉(zhuǎn)數(shù)學(xué)之二維數(shù)組排序
如何理解數(shù)據(jù)結(jié)構(gòu)中的抽象數(shù)據(jù)類型
Excel數(shù)組公式在林業(yè)多條件求和中的應(yīng)用
一種成本更低的全新靜態(tài)DRAM存儲(chǔ)單元
MiR-125a-5p is Upregulated in Plasma of Residents from An Electronic Waste Recycling Site
尋找勾股數(shù)組的歷程
范疇數(shù)據(jù)類型上的子類型*
团风县| 安远县| 民乐县| 涞水县| 梁山县| 蒲江县| 安丘市| 那坡县| 辽中县| 青龙| 渑池县| 横山县| 阿城市| 清远市| 徐水县| 沈丘县| 罗江县| 宁强县| 景谷| 富锦市| 乐平市| 宁津县| 始兴县| 云阳县| 玛纳斯县| 太谷县| 彰化县| 名山县| 沂源县| 温州市| 卓尼县| 玉树县| 全州县| 湖州市| 晋城| 清丰县| 聂拉木县| 莱西市| 襄城县| 丹棱县| 察雅县|