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

        ?

        C語(yǔ)言程序設(shè)計(jì)指針操作分析與研究

        2020-10-10 01:44:28
        魅力中國(guó) 2020年32期
        關(guān)鍵詞:字符串數(shù)組指針

        (貴州城市職業(yè)學(xué)院,貴州 貴陽(yáng) 550025)

        指針是C語(yǔ)言程序?qū)W習(xí)的重點(diǎn)和難點(diǎn),對(duì)程序設(shè)計(jì)人員來(lái)說(shuō)熟練掌握指針并應(yīng)用于程序設(shè)計(jì)非常有必要。程序設(shè)計(jì)中正確應(yīng)用指針可以提高程序的執(zhí)行效率,能夠快速實(shí)現(xiàn)動(dòng)態(tài)數(shù)組的建立,能夠高效地處理字符串等數(shù)據(jù)。

        一、指針的定義

        指針是C語(yǔ)言程序設(shè)計(jì)中一個(gè)重要的概念,指針是一種與普通變量不同的特殊的變量,普通變量主要用來(lái)存儲(chǔ)程序運(yùn)算時(shí)需要處理的數(shù)據(jù)或值,而指針則是內(nèi)存單元地址。在程序設(shè)計(jì)過(guò)程中我們對(duì)指針的內(nèi)存單元地址不感興趣,感興趣的是這個(gè)內(nèi)存單元地址所存儲(chǔ)的變量或函數(shù),即指針?biāo)赶虻淖兞炕蚝瘮?shù)。這個(gè)過(guò)程如同客戶點(diǎn)菜時(shí),吸引客戶的不是菜單,而是菜單所“指向”的菜。要注意的是指針和指針變量之間的差別,所謂指針就是存儲(chǔ)單元地址號(hào),指針變量則是一個(gè)能夠存儲(chǔ)地址值的變量,它可以通過(guò)存儲(chǔ)指針變量的地址值間接地訪問(wèn)指針變量所指向的變量值[1]。

        二、指針的操作與問(wèn)題分析

        C程序中指針可以指向數(shù)據(jù)類型中的所有類型,如普通、結(jié)構(gòu)、函數(shù)等,指針甚至可以實(shí)現(xiàn)指向指針,指針的操作使用與其所指向的數(shù)據(jù)類型有關(guān)。例如指向數(shù)值型的指針能夠進(jìn)行加減乘除相關(guān)數(shù)學(xué)運(yùn)算,指向字符串型指針可以完成字符串的輸入、輸出,指向結(jié)構(gòu)體的指針可以訪問(wèn)結(jié)構(gòu)體內(nèi)字段數(shù)據(jù),指向函數(shù)的指針是函數(shù)調(diào)用的接口。在指針的操作使用過(guò)程中要注意以下幾點(diǎn):

        (一)定義指針時(shí)需要做初始化,如果指針指向的數(shù)據(jù)還沒(méi)有明確,可以初始化為0或NULL。如果只定義指針而不做初始化容易破壞系統(tǒng)數(shù)據(jù)和引起系統(tǒng)故障。例如:int *p;*p=10;

        p是一個(gè)指針變量,在沒(méi)有明確地址指向的時(shí)候即附值10,當(dāng)把10附值給p時(shí),就可能會(huì)覆蓋原來(lái)的信息,甚至破壞系統(tǒng)。因此,在給指針附值時(shí)需要做地址指向初始化,正確的代碼為:

        Int b,*p;p=&b;*p=10;或者改為int *p;p=(int *)malloc(sizeof(int));*p=10;

        (二)字符指針使用錯(cuò)誤

        C語(yǔ)言中不可以定義字符串變量,字符串的處理與應(yīng)用可以借助字符數(shù)組或字符指針來(lái)完成。字符數(shù)組或字符指針在處理字符串時(shí)有區(qū)別:應(yīng)用字符數(shù)組處理字符串時(shí),系統(tǒng)為字符串?dāng)?shù)據(jù)分配固定連續(xù)的存儲(chǔ)空間,數(shù)據(jù)名即該存儲(chǔ)空間的首地址;使用字符指針管理字符串時(shí),系統(tǒng)不會(huì)為字符指針?lè)峙浯鎯?chǔ)空間,而僅是系統(tǒng)中一個(gè)隨機(jī)的地址值。如:

        Char *s1,s2[60];scanf(“%s”,s1);s2=”abcdefghijk”;

        輸入語(yǔ)句scanf(“%s”,s1)雖然格式正確,但可能會(huì)導(dǎo)致s1中的信息丟失;s2=”abcdefghijk”附值語(yǔ)句中s2是數(shù)組名,是一個(gè)指針常量,代表數(shù)組的首地址,其值不能改變,直接附值錯(cuò)誤。因而,正確的代碼應(yīng)為:Char*s1,s2[20];s1=(char *)malloc(60);scanf(“%s”,s1);strcpy(s2,”abcdef gh”);或者改為:char s1[60],*s2;scanf(“%s”,s1);s2=”abcdefgh”;

        在處理字符串時(shí)字符指針能夠直接指向字符串常量的首地址,但字符數(shù)組則不行。

        (三)當(dāng)指針指向數(shù)組類型數(shù)據(jù)時(shí),指針能夠替換數(shù)組名使用。如下代碼:

        int b[3]={1,2,3};int *p=b則p[0]、p[1]、p[2]與b[0]、b[1]、b[2]對(duì)應(yīng)值相同。

        (四)指針能夠?qū)崿F(xiàn)受限制的加減運(yùn)算

        C語(yǔ)言指針完成自加或自減時(shí)與普通數(shù)值型變量有區(qū)別,在進(jìn)行自加或自減運(yùn)算時(shí)必須保證指針進(jìn)行加減運(yùn)算后結(jié)果仍有意義。當(dāng)C語(yǔ)言指針指向數(shù)組后,指針的加減運(yùn)算變得有意義,進(jìn)行自加運(yùn)算時(shí)指針指向數(shù)組中的下一元素;進(jìn)行自減運(yùn)算時(shí)指針指向數(shù)組中的上一元素。如果指向相同數(shù)組的兩指針進(jìn)行相減,即地址大的減地址小的,結(jié)果則是兩個(gè)指針間數(shù)組元素的個(gè)數(shù)[2]。

        批量處理相同的數(shù)據(jù)可以運(yùn)用數(shù)組來(lái)實(shí)現(xiàn),定義數(shù)組后數(shù)組中的每個(gè)元素均可以作為單獨(dú)的指針常量來(lái)使用。

        (五)形參指針調(diào)用缺少地址,如下程序:

        上述代碼能正常編譯和執(zhí)行,但運(yùn)行結(jié)果沒(méi)有實(shí)現(xiàn)交換a與b的值,這是因?yàn)樾螀橹羔?,?shí)參調(diào)用時(shí)必須為對(duì)應(yīng)的地址??梢詫⒄{(diào)用函數(shù)改為:s(int *x,int *y),系統(tǒng)編譯時(shí)若主調(diào)函數(shù)沒(méi)有按要求傳送地址則報(bào)錯(cuò),上述修改可以避免調(diào)用時(shí)未傳送地址值錯(cuò)誤。

        (六)一維二維數(shù)組名的正確使用

        C語(yǔ)言中一維和二維數(shù)組名均表示數(shù)組元素的首地址。但二者有區(qū)別,一維數(shù)組表示的是所有元素中第一個(gè)元素的首地址,二維數(shù)組表示的是第0行的首地址,在程序設(shè)計(jì)時(shí)要注意區(qū)別,如下程序:

        程序能通過(guò)編譯和執(zhí)行,但結(jié)果不對(duì),問(wèn)題出現(xiàn)在把二維數(shù)組a的行地址傳給了指標(biāo)p,指針指向行但不指向元素,因此,不能輸出數(shù)組值??蓪or(p=a;p

        上例說(shuō)明a是數(shù)組第0行的首地址,*a是數(shù)組第0行第0列元素的首地址[3]。

        (七)動(dòng)態(tài)空間分配函數(shù)的應(yīng)用

        應(yīng)用動(dòng)態(tài)空間分配函數(shù)malloc()分配系統(tǒng)內(nèi)存空間時(shí)易出錯(cuò),如下程序:

        上述代碼編譯通過(guò),但概念不正確,malloc(8)附值指針p前,編譯程序假定了該返回值為整數(shù),但指針p不能被理想的作為整數(shù)看待,需要對(duì)空間分配成功與否作出提前判定[4]。

        三、結(jié)束語(yǔ)

        指針是C語(yǔ)言程序設(shè)計(jì)中一種重要的數(shù)據(jù)類型,其在C語(yǔ)言程序設(shè)計(jì)中具有十分重要的作用和地位,通過(guò)指針的使用,可以很容易的處理復(fù)雜的數(shù)據(jù)結(jié)構(gòu),設(shè)計(jì)出高效率的程序。當(dāng)然,C語(yǔ)言程序設(shè)計(jì)指針難以理解、易出錯(cuò),只有在實(shí)踐中不斷總結(jié)學(xué)習(xí)經(jīng)驗(yàn),才能更好的應(yīng)用C語(yǔ)言指針,才能設(shè)計(jì)出高質(zhì)量的程序。

        猜你喜歡
        字符串數(shù)組指針
        JAVA稀疏矩陣算法
        JAVA玩轉(zhuǎn)數(shù)學(xué)之二維數(shù)組排序
        偷指針的人
        為什么表的指針都按照順時(shí)針?lè)较蜣D(zhuǎn)動(dòng)
        尋找勾股數(shù)組的歷程
        基于改進(jìn)Hough變換和BP網(wǎng)絡(luò)的指針儀表識(shí)別
        ARM Cortex—MO/MO+單片機(jī)的指針變量替換方法
        一種新的基于對(duì)稱性的字符串相似性處理算法
        依據(jù)字符串匹配的中文分詞模型研究
        VB數(shù)組在for循環(huán)中的應(yīng)用
        考試周刊(2012年88期)2012-04-29 04:36:47
        亚洲人成人77777网站| 亚洲一区二区三区日本久久九| 欧美嫩交一区二区三区| 亚洲色欲色欲综合网站| 国产综合自拍| 亚洲视频一区二区蜜桃| 综合久久久久6亚洲综合| 国产一区精品二区三区四区| 欧美群妇大交群| 草草久久久无码国产专区| 亚洲欧洲精品成人久久曰不卡| 午夜av福利亚洲写真集| 青青草大香蕉视频在线观看| 国产成人午夜高潮毛片| 18成人片黄网站www| 日韩爱爱视频| 偷拍女厕尿尿在线免费看| 亚洲国产中文字幕精品| 一区二区三区乱码在线 | 欧洲 | 中文在线最新版天堂av| 久久精品人搡人妻人少妇| 老少配老妇老熟女中文普通话 | 在线人成免费视频69国产| 国产福利姬喷水福利在线观看| 欧美手机在线视频| 女同av一区二区三区| 精品乱码一区内射人妻无码| 黑人巨大videos极度另类| 激情视频在线观看国产中文| 中文字幕有码久久高清| 中文字幕日韩欧美一区二区三区 | 亚洲伊人久久成人综合网| 丰满人妻一区二区三区52| 亚洲性色av一区二区三区| 国产精品卡一卡二卡三| 国产激情一区二区三区在线蜜臀| 亚洲av毛片在线免费看| 国产午夜精品一区二区三区| 亚洲成AⅤ人在线观看无码| 日本97色视频日本熟妇视频| 久久精品国产亚洲av麻豆长发 |