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

        ?

        C語言指針變量研究

        2023-05-24 04:51:46史宇軒徐洪麗丁頤寧
        科技資訊 2023年8期
        關(guān)鍵詞:數(shù)組指針指向

        史宇軒 徐洪麗 丁頤寧

        摘要:指針在C語言程序設(shè)計(jì)中占有重要的地位,指針變量的靈活性是C語言的主要特色之一。指針變量能夠方便表示各種復(fù)合數(shù)據(jù)類型,可以使用數(shù)組和字符串,同時也可以處理內(nèi)存地址。文章首先論述了指針和地址的關(guān)系,以及指針的定義;其次根據(jù)指針的實(shí)質(zhì)化繁為簡,總結(jié)了3種不同的指針賦值方式;再次,給出了常用的指針運(yùn)算和注意事項(xiàng),最后,輔助以舉例和練習(xí)。指針變量的靈活性也帶給程序一定的危險(xiǎn)性,因此能否正確理解和使用指針是是否掌握C語言的一個標(biāo)志。

        關(guān)鍵字:地址和指針??指針變量??指針變量賦值???指針變量運(yùn)算

        中圖分類號:TP312.1????文獻(xiàn)標(biāo)識碼:A

        Research?of??Pointer?Variables?in?C?Language

        SHI?Yuxuan?1???XU??Hongli?2*????DING?Yining

        (1.School?of?Computer?Science?and?Technology,?Shangdong?University?of?Technology,?Zibo,?Shandong?Province,?255000?China;?2.School?of?Information?Science?and?Engineering,?Shandong?Agricultural?University,?Taian,?Shandong??Province,271018?China;?3.?College?of?Geodesy?and?Geomatics,?Shandong?University?of?Science?and?Technology,?Qingdao,?Shandong?Province,??266590?China)

        Abstract:?The?pointer?occupies?an?important?position?in?programming?in?C?language,?and?the?flexibility?of?pointer?variables?is?one?of?the?main?features?of?C?language.?Pointer?variables?can?easily?represent?a?variety?of?composite?data?types,?can?use?arrays?and?strings,?and?can?also?handle?memory?addresses.??This?article?firstly?discusses?the?relation?between?pointers?and?addresses?and?the?definition?of?the?pointer,?then?simplifies?the?complex??according?to?the?essence?of?pointer?and?summarizes?three?different?pointer?assignment?methods,?gives?commonly?used?pointer?operations?and?matters?needing?attention?again,?and?finally?gives?auxiliary?examples?and?exercises.?The?flexibility?of?pointer?variables?also?brings?some?risks?to?the?program,?so?whether?you?can?understand?and?use?pointers?correctly?is?a?sign?of?mastery?of?C?language.

        Key?Words:?Address?and??pointer;?Pointer?variable;?Pointer?variable?assignment;?Pointer?variable?operation

        指針變量在C語言程序設(shè)計(jì)中占有重要的地位,已知在程序中定義了一個變量,在對該程序進(jìn)行編譯時,首先要借助編譯程序?qū)⑵滢D(zhuǎn)換成目標(biāo)代碼,也就是*.OBJ文件,然后,通過操作系統(tǒng)將目標(biāo)代碼裝入特定的可標(biāo)識的內(nèi)存區(qū)域中。編譯系統(tǒng)會根據(jù)程序中定義的變量類型,為該變量分配內(nèi)存單元,該內(nèi)存單元也就是該變量的地址,其內(nèi)容為該變量的內(nèi)容?[1]。因此程序員通過程序所定義對象的名稱來訪問對象。假定程序員能夠知道某程序?qū)ο笤趦?nèi)存中的存儲位置,即存放該對象的首地址,當(dāng)然也可使用該地址訪問對象。C語言能夠滿足以上的需求,提供解決上述問題必要的技術(shù)手段,也就是指針變量。

        1?指針的定義

        1.1?地址和指針

        C語言中,指針實(shí)際上就是地址。在計(jì)算機(jī)中,數(shù)據(jù)都是存放在存儲器中的。通常把存儲器中的一個字節(jié)稱為一個內(nèi)存單元,為了正確地訪問這些內(nèi)存單元,必須為每個內(nèi)存單元編號,該編號就是地址。根據(jù)該編號(如變量?int?a=1;的地址&a)即可以找到該變量的內(nèi)容,在地址所表示的內(nèi)存單元中實(shí)際存放的數(shù)據(jù)是該內(nèi)存單元的內(nèi)容,需特別注意的是內(nèi)存單元的地址與內(nèi)存單元的內(nèi)容是兩個完全不同的概念??梢酝ㄟ^printf(“%d%d”,&a,a);實(shí)際做個測試,即:內(nèi)存儲器中的所有字節(jié)(byte)都擁有一個編號,該編號即“地址”,它類似于教學(xué)樓中的教室號;數(shù)據(jù)存放在地址所表示的內(nèi)存單元中,類似于教室中上課的學(xué)生;因?yàn)橥ㄟ^地址能找到所需的變量單元,通常說地址指向該變量單元。

        將地址形象化地稱為“指針”,注意區(qū)分存儲單元的地址和存儲單元的內(nèi)容。例如:VC++為整型變量分配4個字節(jié),對單精度浮點(diǎn)型變量分配4個字節(jié),對字符型變量分配1個字節(jié)。地址是一個直接存取的概念,必須通過地址才能找到存儲變量值的存儲單元,即“地址”指向了變量的存儲單元,C語言形象地將地址稱為“指針”。因此,一個變量的地址稱為該變量的“指針”。圖1為按變量地址存取變量的方式稱為“直接訪問”方式。int?i=3,j=6,k;???k=i+j;?cout<<k;

        1.2???指針變量

        int?i=3,j=6,k;???int?*i_pointer;?????i_pointer=&i;????*i_pointer=50;如圖2所示:與地址的直接存取不同,指針變量是一種間接存取方式。即先找到變量i_pointer的內(nèi)容2000,再找到該2000地址下所存儲的內(nèi)容50,因此指針變量是一種間接存取的方式。

        1.3??指針變量的定義

        指針變量中存儲的是地址,而不是實(shí)際的數(shù)據(jù),它存儲的是指向該數(shù)據(jù)的地址(閑蕩于房間號),這是指針變量和普通變量的主要不同。因此,在使用前必須先聲明或定義其為指針變量,并說明指針變量中存儲的地址指向的數(shù)據(jù)類型(間接存儲)。指針類型基本定義形式為:類型說明符??*變量名;其中,*表示該變量是指針變量(存儲地址的),變量名是指針變量名,類型說明符標(biāo)志了其存儲的地址值所指向的數(shù)據(jù)類型[2]。明確了指針變量所指向的變量的類型,編譯器就可根據(jù)該類型來讀取內(nèi)存中相應(yīng)的連續(xù)空間。

        例如:int?*p;//,int是類型說明符?;*是指針類型說明符;p是變量名

        int?*?arr[8]//?聲明一個指向整型數(shù)據(jù)的指針數(shù)組,有8個元素。

        int?(*arr)[10]?//?定義一個數(shù)組指針,該指針指向一個?int?類型的一維數(shù)組

        int?**p;???????//?定義一個指針?p?,該指針指向一個?int?類型的指針

        數(shù)組指針:數(shù)組指針可以理解為“數(shù)組的指針”,是指針,該指針指向數(shù)組,即是指向數(shù)據(jù)的指針,它的長度由數(shù)組本身決定。即首先這個變量是一個指針,該指針存放的是地址,類似于int?a[5][6]?數(shù)組中的?a,a+1?,a+2?等,是指向行的地址,并沒有精確到具體的列值。指針數(shù)組:指針數(shù)組是“指針的數(shù)組”,?是數(shù)組,該數(shù)組元素為指針類型。

        指針變量的定義中需要說明兩問題:?1)?用“*”定義該變量為指針變量2)指針變量名;3)?說明該變量的名稱,及其間接指向數(shù)據(jù)的類型。指針變量在使用前必須先初試化。初試化之前不會自動分配內(nèi)存空間。

        2?指針變量的賦值和指針運(yùn)算

        2.1?指針變量的賦值

        根據(jù)指針變量的定義和含義,指針變量的內(nèi)容應(yīng)該是編譯后有具體位置的地址。關(guān)于地址,語言中,普通變量有地址,數(shù)組的名字代表數(shù)組的首地址。即?int?arr[10];??則a即與第一個元素的地址&arr[0]的值是一樣。可以通過printf(”%d%d",arr,&arr[0])測試。即:

        int?arr[10];??/*定義包含10個整型數(shù)據(jù)的數(shù)組*/

        int?*p1;????/*定義p1為指向整型變量的指針*/

        P1=arr;?/*把數(shù)組arr的首地址賦給指針變量p*/

        P1=&arr[0];??/*?把a(bǔ)rr[0]元素的地址賦給指針變量p1。即p1指向數(shù)組arr的第0號元素。*/

        因此指針變量的賦值有以下三種基本形式:

        指針的3種賦值方式

        Int?a=1,*p;?P=&a;?//?a為普通變量

        Int?a[10],*p;P=a?;//為數(shù)組?程序1為示例

        P2=p1;//?p1已經(jīng)按照上述兩種方式賦值

        注意:“*”出現(xiàn)在不同的位置有不同的意義。出現(xiàn)在類型聲明中,它是類型說明符,除此之外,出現(xiàn)在表達(dá)式中,它是運(yùn)算說明符,是指針取內(nèi)容運(yùn)算符*?[3],表示該指針變量間接所指的內(nèi)容。

        2.2??指針運(yùn)算

        常用的指針運(yùn)算有”*”間接訪問內(nèi)存,單目運(yùn)算符。++/--自增或自減運(yùn)算符,單目運(yùn)算符[4]。另外還用常用的關(guān)系運(yùn)算符:>,<,>=,<=,!=。基礎(chǔ)必備知識:

        *++p?相當(dāng)于??*(++p)?或者?a[++i],?先對p做加運(yùn)算,再做*運(yùn)算。

        *p++?相當(dāng)于??*(p++)??或a[i++],先對?p進(jìn)行取內(nèi)容“*”運(yùn)算,在使?向下移動一位。

        (*p)++??先取*p的值,再將數(shù)值自加。++(*p)??先將*p值自加,再取*的值。因此:

        P+i和a+i都表示a[i]的地址,即它們都指向數(shù)組中第i號元素,即指向a[i]。

        *(P+i)和*(a+i)都表示P+i和a+i所指向?qū)ο蟮膬?nèi)容即a[i]。

        指向數(shù)組元素的指針,即允許指針變量帶下標(biāo),如p[i]與*(p+i)等價。

        假如p=a+5,則p[2]就相當(dāng)于*(p+2),即p[7],p[-3]就相當(dāng)于*(p-3),即p[2]。

        等價關(guān)系??p+i?---?a+i??即從當(dāng)前p指向地址往后移i個元素的地址。

        p=a;?*(p+5)---*(a+5)---a[5]?---p[5]???這幾種方式是a[5]的不同表示方法。

        注意:*和&、++、--都是一元運(yùn)算,它們的優(yōu)先級比所有的算術(shù)運(yùn)算符都高。*其結(jié)合性為自右至左?。?*p++等價于*(p++)。

        兩指針變量之間的運(yùn)算:指針變量不指向同一數(shù)組,它們之間的運(yùn)算沒有意義,即僅僅當(dāng)兩指針變量指向同一數(shù)組時,運(yùn)算才有意義[5]。一般情況下,兩個指針變量表示同一個數(shù)組中的元素,它們可以進(jìn)行關(guān)系運(yùn)算,運(yùn)算結(jié)果表示它們所指數(shù)組元素的地址之間的關(guān)系[6]。例如:?p1=p2表示p1和p2指向同一數(shù)組元素;p1>p2表示p1處于高地址位置;p1<p2表示p1處于低地址位置。但是p1+p2是沒有真實(shí)意義的。

        3?舉例和練習(xí)

        例題:輸入兩個整數(shù),采用指針方式從小到大排序。

        #?include?<stdio.h>

        void?main()

        {???int?i,j,k;??int?t;

        int?*p=&i,*q=&j;

        *p=2;*q=1;

        if??(*p>*q)

        {????t=*p;???????*p=*q;??????*q=t;??}

        printf("*p=%d,*q=%d\n",*p,*q);

        4??總結(jié)

        指針在C語言程序設(shè)計(jì)中占有重要的地位,與其它語言相比,指針變量的靈活性是C語言的主要特色之一。指針極大地豐富了C語言的功能,但是凡事有兩面性,指針變量的靈活性也帶給程序一定的危險(xiǎn)性,因此能否正確理解和使用指針是能夠否掌握C語言的一個標(biāo)志。

        參考文獻(xiàn):

        [1]?王鋮.?一些C庫函數(shù)的實(shí)現(xiàn)[D].吉林大學(xué)?2021:1-2

        [2]?徐洪麗?語言程序設(shè)計(jì)[M].??北京師范大學(xué)出版社?2019:?199-200

        [3]?李琨,賈立偉,石曉明.C程序設(shè)計(jì)語言中文件讀取問題探析[J].電腦編程技巧與維護(hù),2022(02):23-25.

        [4]?尹慧,段華瓊.基于C語言的圖書管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].信息與電腦(理論版),2021,33(23):116-118

        [5]??Baltasar?Garcia?Perez‐Schofield,Matías?Garcia?Rivera,F(xiàn)rancisco?Ortin,Maria?J.?Lado.?Learning?memory

        management?with?C‐Sim:?A?C‐based?visual?tool[J].?Computer?Applications?in?Engineering?Education,2019(5):27-28.

        [6]?岳珊.C語言程序設(shè)計(jì)過程中指針概念的理解及使用[J].信息與電腦(理論版),2020,32(15):111-113

        猜你喜歡
        數(shù)組指針指向
        JAVA稀疏矩陣算法
        科學(xué)備考新指向——不等式選講篇
        JAVA玩轉(zhuǎn)數(shù)學(xué)之二維數(shù)組排序
        偷指針的人
        把準(zhǔn)方向盤 握緊指向燈 走好創(chuàng)新路
        傳媒評論(2017年8期)2017-11-08 01:47:36
        為什么表的指針都按照順時針方向轉(zhuǎn)動
        尋找勾股數(shù)組的歷程
        基于改進(jìn)Hough變換和BP網(wǎng)絡(luò)的指針儀表識別
        電測與儀表(2015年5期)2015-04-09 11:30:42
        ARM Cortex—MO/MO+單片機(jī)的指針變量替換方法
        VB數(shù)組在for循環(huán)中的應(yīng)用
        考試周刊(2012年88期)2012-04-29 04:36:47
        少妇高潮惨叫久久久久久| 中文字幕影片免费人妻少妇| 在线观看免费日韩精品| 精品人妻av区乱码| 国产乱xxⅹxx国语对白| 亚州AV无码乱码精品国产| 国产一区二区三区最新视频| 国产一区二区三区精品毛片 | 亚洲精品成人av观看| 大量老肥熟女老女人自拍| 美女与黑人巨大进入免费观看| 久久久99精品成人片| 四虎影视永久在线观看| 亚洲熟女网站| 中文字幕亚洲乱码熟女在线| 少妇爽到高潮免费视频| 中国无码人妻丰满熟妇啪啪软件| www国产无套内射com| 成人日韩av不卡在线观看| 中文字幕av一区二区三区诱惑| 日本男人精品一区二区| 国产一区二区三区乱码| 免费又黄又爽又猛的毛片| 国产精品久久久久久久久久影院| 亚洲精品天堂日本亚洲精品| 精品国产yw在线观看| 精品9e精品视频在线观看| Y111111国产精品久久久| av成人资源在线播放| 国产精品久久久在线看| 亚洲av片在线观看| 精品国产黑色丝袜高跟鞋| 日韩午夜在线视频观看| 高清少妇二区三区视频在线观看| 欧洲女人与公拘交酡视频| 亚洲18色成人网站www| 亚洲国产精品无码久久九九大片健| 日韩在线视频专区九区| 人人爽久久久噜人人看| 免费观看黄网站在线播放| 亚洲欧美久久婷婷爱综合一区天堂|