亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        淺談C語言指針變量的“地址”與“值”

        2020-03-11 11:35:46
        福建質(zhì)量管理 2020年5期
        關(guān)鍵詞:數(shù)組指針字節(jié)

        (重慶三峽學(xué)院計(jì)算機(jī)科學(xué)與工程學(xué)院 重慶 404100)

        C語言指針數(shù)據(jù)類型是整個(gè)C語言教學(xué)的重點(diǎn)難點(diǎn)。指針這個(gè)詞是從英文單詞 “pointer”直譯而來,事實(shí)上,指針更應(yīng)該翻譯為地址,指針變量稱之為地址變量更合適。由于指針數(shù)據(jù)類型的存在,使得C語言可以直接同計(jì)算機(jī)內(nèi)存打交道,這是C語言的低級(jí)語言特征。但是,由于指針變量的特殊性,使得C語言初學(xué)者在學(xué)習(xí)的時(shí)候往往感到很困惑,不知道何時(shí)取的是地址,何時(shí)取的是值。下面以一維數(shù)組和二維數(shù)組與指針變量的示例來理解指針變量的用法。

        一、指針和一維數(shù)組

        先來看指針和一維數(shù)組的關(guān)系,程序主要代碼如下:

        1:int arr[5]={1,2,3,4,5};

        2:int *p;

        3:p=arr;

        4:printf(“%x %x %x ”,p,arr,&arr[0]);

        5:printf(“%d %d %d %d ”,*p,*arr,arr[0],p[0]);

        以上程序定義了一維整型數(shù)組arr和指向此一維數(shù)組的整型指針變量p。在定義時(shí),符號(hào)*表示定義的是一個(gè)指針變量,符號(hào)[ ]表示定義的是一個(gè)數(shù)組。除了定義外,符號(hào)*和[ ]均具有“解地址”的功能,和另一個(gè)取地址符號(hào)“&”具有相反的功能,就像除法是乘法的逆運(yùn)算一樣。程序第4行運(yùn)行后均輸出十六進(jìn)制的地址,p是指針變量,由于程序第3行的賦值語句,p和arr均表示地址,但p是地址變量,值可變,arr為地址常量,值不能變,即p++,++p,p- -,- -p均是可行的,但arr自增自減不行。由于p賦值為arr數(shù)組名,即p此時(shí)表示arr數(shù)組首地址,也是arr數(shù)組第0個(gè)元素的地址,所以p,arr,&arr[0]地址相同。程序第5行運(yùn)行后均輸出的是arr數(shù)組第0個(gè)元素的值。由第4行全為地址如何變成第5行的全為值呢?有兩種方式,一種用“解地址”符號(hào)*,例如*p,*arr;另一種用“解地址”符號(hào)[ ],例如p[0],arr[0]。類似地,要表示arr數(shù)組第1個(gè)元素的地址,可以表示為p+1,arr+1,&arr[1]。要表示arr數(shù)組第1個(gè)元素的值,可以表示為*(p+1),*(arr+1),arr[1],p[1]。此時(shí),p和arr可以互換。那&p表示什么呢?指針變量是一種特殊的變量,變量中存的是其它變量的地址值,但是指針變量本身也是要占內(nèi)存空間的,所以&p表示的是指針變量p本身的地址,一般占4個(gè)字節(jié)或8個(gè)字節(jié),這取決于編譯器,例如VC++6.0給指針變量分配4個(gè)字節(jié)的空間,而DevC++給指針變量分配8個(gè)字節(jié)的空間。

        二、指針和二維數(shù)組

        接下來看指針和二維數(shù)組的關(guān)系,程序主要代碼如下:

        1:int a[3][4]={1,2,3,4,10,20,30,40,100,200,300,400};

        2:int(*p)[4];

        3:p=a;

        4:printf("%x %x %x %d %x %x %d %d ",a,*a,*a+1,**a,a+1,*(a+1),**(a+1),*(*(a+1)+2));

        5:printf("%x %x %x %d %x %x %d %d ",p,*p,*p+1,**p,p+1,*(p+1),**(p+1),*(*(p+1)+2));

        6:printf("%x %x %x ",a[2],&a[2],&a[2][0]);

        7:printf("%x %x %x ",p[2],&p[2],&p[2][0]);

        8:printf("%d %d %d ",a[2][1],*(a[2]+1),*(*(a+2)+1));

        9:printf("%d %d %d ",p[2][1],*(p[2]+1),*(*(p+2)+1));

        以上程序定義了一個(gè)3行4列的二維整型數(shù)組a和指向此二維數(shù)組的整型指針變量p,如第2行這樣定義的指針變量相當(dāng)于行指針,可以用來遍歷二維數(shù)組a的行,它與指向一維數(shù)組的指針變量不同之處在于,若指針變量p指向一維數(shù)組,則p+1表示一維數(shù)組下一個(gè)元素的地址,若指針變量p指向二維數(shù)組,則p+1表示二維數(shù)組下一行的首地址。當(dāng)然,若指針變量p不是第2行這么定義的,而是直接定義為int *p;p=a;這種情況下p+1表示下一個(gè)元素的地址。由第4行可以知道,a、*a輸出的都是一樣的地址值,但含義是不同的,a表示的是整個(gè)數(shù)組的首地址和第0行的首地址,但*a表示的是第0行第0列元素的地址。符號(hào)*具有“解地址”的功能,但由于是二維數(shù)組,解一次地址并不能取到某個(gè)元素的值,如果再解一次地址,例如**a就表示第0行第0列元素的值。由于是二維數(shù)組,a+1和p+1一樣都表示數(shù)組第1行的首地址。*(a+1)解一次地址,表示第1行第0列元素的地址,如果再解一次地址,則**(a+1)表示第1行第0列元素的值。*(a+1)+2表示行指針先定位到第1行第0列,表示地址,列指針再移動(dòng)2個(gè)元素的位置,即表示定位到第1行第2列,仍然為地址。如果再用一次*號(hào),則表示對(duì)應(yīng)的元素的值了。類似地,符號(hào)[ ]具有解地址的功能。例如第6行a[2]表示第2行第0個(gè)元素的地址(從0行開始),&a[2]表示對(duì)第2行取地址,即第2行首地址,&a[2][0]表示對(duì)a[2][0]這個(gè)元素取地址,3個(gè)地址都是一樣的,但含義不同。

        由第8行可知,定義了二維數(shù)組和相應(yīng)的行指針,要想取到數(shù)組元素的值,要么需要2個(gè)解地址符號(hào)*,要么需要1個(gè)*和1個(gè)[ ],要么需要2個(gè)[ ]。那么只有1個(gè)*或[ ]表示取到某個(gè)元素的地址,而1個(gè)*或[ ]都沒有,則表示某一行的首地址。而取地址符號(hào)“&”就像是“*”和“[ ]”相反效果的符號(hào)一樣。另外,由程序可知,指針變量名和數(shù)組名在很多情形下可以互相替換,效果一樣。

        三、總結(jié)

        C語言的精華在于指針,而指針又是比較難學(xué)的,初學(xué)者最不容易理解的就是它的地址與值的關(guān)系。本文通過兩個(gè)指針變量使用示例,將指針變量與數(shù)組中元素的地址和值作了詳細(xì)的闡釋,相關(guān)概念能幫助初學(xué)者熟練使用指針變量進(jìn)行數(shù)組元素遍歷。

        猜你喜歡
        數(shù)組指針字節(jié)
        JAVA稀疏矩陣算法
        No.8 字節(jié)跳動(dòng)將推出獨(dú)立出口電商APP
        JAVA玩轉(zhuǎn)數(shù)學(xué)之二維數(shù)組排序
        No.10 “字節(jié)跳動(dòng)手機(jī)”要來了?
        偷指針的人
        為什么表的指針都按照順時(shí)針方向轉(zhuǎn)動(dòng)
        簡(jiǎn)談MC7字節(jié)碼
        尋找勾股數(shù)組的歷程
        基于改進(jìn)Hough變換和BP網(wǎng)絡(luò)的指針儀表識(shí)別
        ARM Cortex—MO/MO+單片機(jī)的指針變量替換方法
        亚洲美女性生活一级片| 国产精品国产三级第一集| 免费a级毛片在线播放不收费| 亚洲日韩成人av无码网站| 五月中文字幕| 久久精品国产视频在热| 蜜桃视频第一区免费观看| 美女视频在线观看亚洲色图 | 日本激情久久精品人妻热| 国产夫妻自拍视频在线播放| 亚洲精品乱码8久久久久久日本 | 国产乱淫h侵犯在线观看| 99久久99久久久精品齐齐| 波多野结衣中文字幕久久| 青草蜜桃视频在线观看| 中国黄色偷拍视频二区| 国产一区二区三区小说| 国产精品免费久久久久软件| 天堂在线观看av一区二区三区 | 99精品国产一区二区三区不卡| 国产人碰人摸人爱视频| 91精品国产综合久久青草| 久久本道久久综合伊人| 国产熟妇另类久久久久| 在线播放a欧美专区一区| 蜜桃视频中文字幕一区二区三区 | 国产国拍亚洲精品永久不卡| 日本高清一区二区三区不卡| 公和我做好爽添厨房| 日日猛噜噜狠狠扒开双腿小说| 蜜桃一区二区三区在线看| aa日韩免费精品视频一| 中文字幕亚洲精品无码| 色婷婷日日躁夜夜躁| 黄色网页在线观看一区二区三区| 亚洲一区二区三区四区地址| 日本在线 | 中文| 欧美黑人巨大xxxxx| 久久久2019精品视频中文字幕| 国产成人精品日本亚洲i8| 成l人在线观看线路1|