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

        ?

        淺析C++中獲取數(shù)組長度的若干方法

        2018-11-01 03:04:18劉昊方歡袁水蓮
        電腦知識與技術(shù) 2018年19期
        關(guān)鍵詞:數(shù)組語言

        劉昊 方歡 袁水蓮

        摘要:數(shù)組是編程語言中應(yīng)用最為廣泛、功能強(qiáng)大的一種數(shù)據(jù)結(jié)構(gòu)。該文分析和探討了C++語言中常見的不同類型數(shù)組長度的獲取方法與機(jī)理,將數(shù)組分為靜態(tài)數(shù)組和動態(tài)數(shù)組,從兩種不同的構(gòu)造結(jié)構(gòu)出發(fā),結(jié)合程序?qū)嵗謩e闡釋了其中數(shù)值型、字符型和一維及多維數(shù)組長度的獲取方法,并進(jìn)行了具體方法的原理探究。其次,對所總結(jié)的幾種方法進(jìn)行了比較,給出操作過程中常見的出錯及解決方案,以便于掌握數(shù)組長度應(yīng)用中的操作技巧。

        關(guān)鍵詞:數(shù)組;長度獲??;C++語言;錯誤處理

        中圖分類號:G642.0 文獻(xiàn)標(biāo)識碼:A 文章編號:1009-3044(2018)19-0089-04

        Abstract: Array is the most powerful data structure and widely used in programming languages. This paper analyzes and discusses the methods and mechanisms for the acquisition of different types of array lengths commonly found in the C++ language. The arrays are divided into static arrays and dynamic ones. Starting from two different structural structures, combined program examples, the methods for obtaining lengths of numeric, character, one-dimensional and multi-dimensional arrays are respectively illustrated. And this paper carries out the principle of the specific method. Then, the methods summarized in the paper are compared, and the common mistakes and solutions are given in order to grasp the operating skills in array length applications.

        Key words: Array; Length acquisition; C++ language; Error handling

        1 背景

        在C++程序設(shè)計中,為了可以高效處理大量數(shù)據(jù),同時縮短和簡化程序,將具有相同類型的若干元素按照有序的形式組織起來,這些按序排列的同類數(shù)據(jù)元素的集合即可稱為數(shù)組[1]。經(jīng)過C和C++語言的學(xué)習(xí),筆者發(fā)現(xiàn)書中僅對數(shù)組的定義和相關(guān)基本操作進(jìn)行了簡單概述,沒有對獲取數(shù)組長度的方法等數(shù)組應(yīng)用細(xì)節(jié)進(jìn)行深入闡釋。數(shù)組的實際應(yīng)用范圍十分廣泛,在對指針、字符串、循環(huán)語句等操作過程中,程序設(shè)計人員常常需要獲取數(shù)組長度來解決相關(guān)程序問題[2]。在相關(guān)程序設(shè)計語言中,如Java語言中給出了.length作為數(shù)組屬性來直接獲取數(shù)組長度,Python中給出了len函數(shù)來獲取長度,而C++中并未定義相關(guān)可直接獲取數(shù)組長度的屬性和函數(shù)。鮮少有文獻(xiàn)全面總結(jié)了C++語言中獲取不同類型數(shù)組的不同方法,因此該文首先闡述了常見的不同類型數(shù)組長度的獲取方法和機(jī)理,在ANSI C2.0環(huán)境下分析了操作過程中可能出現(xiàn)的數(shù)組越界等出錯情況,并進(jìn)行相關(guān)對比和區(qū)分,該文所給代碼均經(jīng)過DEV-C++5.4.0編譯通過。

        2 常見的不同類型數(shù)組及其長度獲取方法

        在C++中,靜態(tài)數(shù)組是指在聲明數(shù)組時,就用常量表達(dá)式明確指定數(shù)組的大小,且運行時的長度不可改變,數(shù)組只在定義它的塊語句內(nèi)存在。靜態(tài)數(shù)組中常見的有靜態(tài)字符型數(shù)組和靜態(tài)數(shù)值型數(shù)組,利用sizeof()運算符返回類型或數(shù)據(jù)對象的長度(單位為字節(jié))可以間接獲取數(shù)組的長度,同時C++中還給出了strlen()函數(shù)來計算給定靜態(tài)字符型數(shù)組的長度。動態(tài)數(shù)組則是在運行時動態(tài)分配數(shù)組空間,雖然數(shù)組長度是固定的,但不必在定義時確定其長度,且動態(tài)數(shù)組在程序中會一直存在,直到顯式將其釋放。C++中創(chuàng)建動態(tài)數(shù)組可以采取用new來申請空間和利用vector模板來創(chuàng)建。因此下面從靜態(tài)數(shù)組的不同類型和動態(tài)數(shù)組的不同創(chuàng)建方法,分別闡述數(shù)組長度的獲取方法和機(jī)理。

        2.1 靜態(tài)數(shù)組

        2.1.1 靜態(tài)數(shù)值型數(shù)組

        C++中未提供可以直接獲取靜態(tài)數(shù)值型數(shù)組長度的函數(shù)和相關(guān)數(shù)組屬性,利用sizeof()操作符可以間接解決該類數(shù)組的長度獲取問題。sizeof()是一個可以返回操作數(shù)所占的內(nèi)存字節(jié)數(shù)的操作符,sizeof(a)/sizeof(a[0])可以獲取一維靜態(tài)數(shù)值型數(shù)組的長度。對于二維靜態(tài)數(shù)值型數(shù)組,可利用sizeof(a),sizeof(a[0]),sizeof(int)進(jìn)行組合來表示二維數(shù)組的行數(shù)列數(shù)以及總元素的數(shù)目。由靜態(tài)一維和二維數(shù)組的獲取數(shù)組長度方法可延伸至靜態(tài)多維數(shù)組獲取數(shù)組長度的方法。

        1)一維靜態(tài)數(shù)值型數(shù)組

        [分析] sizeof()可以返回操作數(shù)所占的內(nèi)存字節(jié)數(shù),因此sizeof(a)返回的是一維數(shù)組a所占的總內(nèi)存,sizeof(a[0])返回的是數(shù)組第一個元素即該數(shù)組每個元素所占的內(nèi)存,因此sizeof(a)/sizeof(a[0])則表示的是數(shù)組a的元素個數(shù)即數(shù)組長度。在C++語言中,習(xí)慣上在程序的開頭將sizeof(a)/sizeof(a[0])定義成一個宏,之后在程序中可直接調(diào)用。

        2)二維靜態(tài)數(shù)值型數(shù)組

        [分析] 對于圖3程序中的二維數(shù)組int a[2][4],sizeof(a)表示二維數(shù)組中所有元素所占的字節(jié)數(shù),由于a[0]指向首行地址,因此sizeof(a[0])表示該二維數(shù)組中每行元素所占字節(jié)數(shù),sizeof(int)則表示該數(shù)組元素類型(int)所占的字節(jié)數(shù),在ANSI C2.0環(huán)境下每個int類型元素所占字節(jié)為6。因此可利用sizeof(a)/sizeof(int)來求二維數(shù)組中數(shù)組元素的總數(shù),數(shù)組列數(shù)可用sizeof(a[0])/sizeof(int)來獲得,數(shù)組行數(shù)可表示為(sizeof(a)/sizeof(int))/( sizeof(a[0])/sizeof(int)),其中sizeof(int)也可以用表示數(shù)組中首個元素所占字節(jié)的sizeof(a[0][0])替換。

        2.1.2 靜態(tài)字符型數(shù)組

        字符型數(shù)組是指用來存放字符或字符串的數(shù)組。在C++中,給出了strlen()函數(shù)來計算給定字符串的長度。該函數(shù)定義在頭文件cstring.h中,參數(shù)為C風(fēng)格字符串的頭指針,返回值是不包含空字符‘\0的字符串長度,它的計算原理是順著頭指針向后掃描,直到碰到第一個字符串結(jié)束符‘\0。字符數(shù)組除了可以使用strlen()函數(shù)外,還可以使用sizeof()操作符獲取數(shù)組長度。

        1)字符串?dāng)?shù)組

        [分析]若數(shù)組為存儲字符串的字符數(shù)組,即以雙引號括起來的字符串整體初始化的字符數(shù)組。在使用時可以事先定義一個比較大的數(shù)組,再用strlen()函數(shù)返回實際用到的數(shù)組元素個數(shù)。通過圖1,可以發(fā)現(xiàn)當(dāng)定義一個長度為10,但實際長度為6的字符串?dāng)?shù)組,strlen()函數(shù)返回的是字符串?dāng)?shù)組的實際長度。原因是編譯器自動地以‘\0來填補(bǔ)字符串?dāng)?shù)組后面的空白處。

        2)字符數(shù)組

        [分析] 通過對兩道程序的對比,事先定義的字符數(shù)組長度不同,所產(chǎn)生的結(jié)果不同。char a[5]={‘1, ‘2, ‘3, ‘4, ‘5}在內(nèi)存的某處存在結(jié)束符‘\0,strlen()函數(shù)遇‘\0停止計算長度,因此算出來的長度并不是字符數(shù)組的真實長度,且值是隨機(jī)的。而char a[6]={‘1, ‘2, ‘3, ‘4, ‘5}可以輸出正確的實際長度的原因同字符串?dāng)?shù)組中敘述的相同,編譯器會自動以‘\0來填補(bǔ)字符串?dāng)?shù)組后面的空白處,我們也可以寫成char a[6]={‘1, ‘2, ‘3, ‘4, ‘5, ‘\0}。

        2.2 動態(tài)數(shù)組

        在C++中,動態(tài)創(chuàng)建數(shù)組的方法主要有兩種,一種是使用new運算符在程序運行階段創(chuàng)建數(shù)組,還有一種是利用vector模板創(chuàng)建動態(tài)數(shù)組。其中若使用new運算符創(chuàng)建動態(tài)數(shù)組,需要首先將數(shù)組的元素類型和元素數(shù)目告訴new,此種情況下討論獲取數(shù)組長度就沒有了意義。vector是C++中STL容器中的一個模板類,它相當(dāng)于一個動態(tài)的數(shù)組,當(dāng)程序設(shè)計人員無法知道自己需要的數(shù)組規(guī)模是多大時,可以利用vector來解決以達(dá)到最大節(jié)約空間目的。所有的STL容器都提供了一些基本方法,其中就包括size()——返回當(dāng)前vector所容納元素的數(shù)目。

        2.2.1 一維動態(tài)數(shù)組

        [分析]在圖7程序中,首先建立了一個未聲明確定長度的double類型的一維動態(tài)數(shù)組,利用push_back()向數(shù)組末尾添加元素,最后利用.size()返回數(shù)組中元素個數(shù)即此一維動態(tài)數(shù)組的長度。

        2.2.2 二維動態(tài)數(shù)組

        [分析]由圖8中程序可以看出,創(chuàng)建一個二維動態(tài)數(shù)組b,則該數(shù)組行數(shù)可用b.size()表示,列數(shù)可用b[0].size()表示,即:

        vector > b;

        int rowCount=b.size() //行數(shù)

        int colCount=b[0].size() //列數(shù)

        3 有關(guān)的獲取數(shù)組長度方法比較

        4 常見的出錯及解決方案

        4.1 sizeof()與strlen()處理字符數(shù)組的邊界問題

        [分析]對于字符串?dāng)?shù)組a,sizeof()運算符返回的是操作數(shù)所占的內(nèi)存字節(jié)數(shù),包括字符串結(jié)束符‘\0‘,因此結(jié)果為6,而strlen()遇到結(jié)尾的結(jié)束符便返回,因此結(jié)果為5;字符數(shù)組b,聲明數(shù)組的長度為6,故sizeof()返回的便是聲明中的內(nèi)存空間,而strlen()統(tǒng)計的是“\0”之前的字符數(shù),返回字符數(shù)組的實際長度;對于常量字符數(shù)組c,sizeof()返回所有字符實際所占的內(nèi)存空間,而strlen()同上所述遇‘\0‘便返回。

        [解決方案]在獲取字符型數(shù)組長度的過程中,程序設(shè)計人員應(yīng)明確strlen()與sizeof()對于字符型數(shù)組的結(jié)束符的邊界問題。其本質(zhì)不同在于sizeof()忽略結(jié)束符的影響,將其看作一個普通字符所占字節(jié)數(shù),計算的是變量的大小,而strlen()則是將字符數(shù)組中的結(jié)束符作為長度判定的依據(jù),遇‘\0‘便返回當(dāng)前結(jié)果。

        4.2 數(shù)組名稱傳參問題

        [分析] 通過傳遞數(shù)組名稱參數(shù)到子函數(shù)來求數(shù)組長度的辦法不可行,該數(shù)組會退化為一個指針,獲取到的是一個指針的長度。

        [解決方案]如果想多次獲取不同數(shù)組的長度,為了避免重復(fù)寫代碼,可利用C++中的template關(guān)鍵詞定義一個求數(shù)組長度的模板。程序代碼如圖10所示。

        5 結(jié)束語

        該文總結(jié)了C++中獲取不同類型數(shù)組長度方式,并利用程序?qū)嵗M(jìn)行了較為詳細(xì)的說明,有助于在以后的程序設(shè)計過程中熟練地使用數(shù)組解決相關(guān)問題。C++語言編程技術(shù)作為C語言編程的延伸和發(fā)展,能夠更好地為計算機(jī)編程服務(wù),更好地滿足現(xiàn)代化發(fā)展需求。在程序設(shè)計過程中,利用數(shù)組可以實現(xiàn)許多其他高級語言難以實現(xiàn)的功能,其中數(shù)組長度更是一大靈活使用點。該文通過實例進(jìn)行分析與總結(jié),有助于為以后編程打下堅實基礎(chǔ)。

        參考文獻(xiàn):

        [1] 許淑華. C語言中數(shù)組應(yīng)用總結(jié)[J]. 科技廣場, 2011, 12(3): 254-256.

        [2] 沈慧娟, 吳曉英. C++中指針與數(shù)組間關(guān)系探秘[J]. 信息技術(shù)與信息化, 2017, 12(4): 131-133.

        [3] 鄭莉. C++語言程序設(shè)計[M]. 北京: 清華大學(xué)出版社, 2010.

        [4] 李文明, 陳哲, 李緒蓉. C程序數(shù)組越界的運行時驗證技術(shù)研究與實現(xiàn)[J]. 計算機(jī)工程與應(yīng)用, 2015, 5(11): 190-195.

        [5] 王文龍. JAVA和C++實現(xiàn)面向?qū)ο蠓椒ǖ姆治鲅芯縖J]. 喀什大學(xué)學(xué)報, 2017, 5(7): 56-59.

        猜你喜歡
        數(shù)組語言
        JAVA稀疏矩陣算法
        電腦報(2022年13期)2022-04-12 00:32:38
        JAVA玩轉(zhuǎn)數(shù)學(xué)之二維數(shù)組排序
        電腦報(2020年24期)2020-07-15 06:12:41
        語言是刀
        文苑(2020年4期)2020-05-30 12:35:30
        讓語言描寫搖曳多姿
        多向度交往對語言磨蝕的補(bǔ)正之道
        辨析指針數(shù)組與數(shù)組指針
        Excel數(shù)組公式在林業(yè)多條件求和中的應(yīng)用
        累積動態(tài)分析下的同聲傳譯語言壓縮
        我有我語言
        尋找勾股數(shù)組的歷程
        国产在线白丝DVD精品| 人妻久久久一区二区三区蜜臀 | 黄色中文字幕视频网站| 亚洲精品第一页在线观看| 最新国产福利在线观看精品| 亚洲肥老太bbw中国熟女| 久久99国产亚洲高清观看首页| 高清国产国产精品三级国产av| 国产极品女主播国产区| 亚洲国产综合精品 在线 一区| 97色综合| 亚洲精品中文字幕不卡| 国产综合精品一区二区三区| 久久久久亚洲av无码a片软件 | 青青草视频在线免费观看91| 人妻少妇偷人精品久久性色av| 国产精品久久国产三级国不卡顿| 亚洲AV综合久久九九| 天堂影院久久精品国产午夜18禁| 国产成人综合久久久久久| 国产成人免费一区二区三区| 亚洲精品天堂av免费看| 日本在线一区二区免费| 色欲网天天无码av| 亚洲av乱码中文一区二区三区| 粉嫩av一区二区在线观看| 麻豆69视频在线观看| 亚洲av无码专区在线播放中文 | 国内精品嫩模av私拍在线观看| 日本xxxx色视频在线观看免费| 波多野结衣av手机在线观看| 国产高清在线精品一区αpp| 视频国产一区二区在线| 白丝爆浆18禁一区二区三区| 成年在线观看免费视频| 加勒比东京热综合久久| 日韩精品视频久久一区二区| 精品国产人妻一区二区三区| 亚洲精品一区网站在线观看| 成人爽a毛片在线播放| 国产精品成人va在线观看|