亚洲免费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
        亚洲av成人无码久久精品| 扒开双腿操女人逼的免费视频| 国产福利97精品一区二区| 无码AV无码免费一区二区| 婷婷成人亚洲综合国产| 国产精品不卡在线视频| 麻豆激情视频在线观看| 永久免费看黄网站性色| 国产精品自产拍在线18禁| av免费在线播放视频| 精品无码一区二区三区的天堂| 中文字幕亚洲欧美在线不卡| 欧美大屁股xxxx高跟欧美黑人| 又大又粗又爽的少妇免费视频| 精品人妻人人做人人爽| 色欲麻豆国产福利精品| 波霸影院一区二区| 天堂视频一区二区免费在线观看| 日本视频一区二区三区三州| 国产无卡视频在线观看| 日本黑人亚洲一区二区| 亚洲av精二区三区日韩| 深夜福利啪啪片| 中文字幕无码不卡一区二区三区| 荡女精品导航| 亚洲精品中文字幕乱码二区| 亚洲中文字幕乱码免费看| 日本一区二区不卡在线| 日韩精品专区在线观看| 欧美牲交a欧美牲交aⅴ| 色噜噜狠狠狠综合曰曰曰| 国产精品成年片在线观看| 未满十八勿入av网免费| 日韩人妻无码中文字幕一区| 日韩国产自拍成人在线| 日韩av一区二区蜜桃| 华人免费网站在线观看| 中文字字幕人妻中文| 久久久久久国产精品mv| 日本一区午夜艳熟免费| 无码一区二区三区网站|