java中数组的含义_数组
數(shù)組(Array)是有序的元素序列。[1]
若將有限個類型相同的變量的集合命名,那么這個名稱為數(shù)組名。組成數(shù)組的各個變量稱為數(shù)組的分量,也稱為數(shù)組的元素,有時也稱為下標(biāo)變量。用于區(qū)分?jǐn)?shù)組的各個元素的數(shù)字編號稱為下標(biāo)。數(shù)組是在程序設(shè)計中,為了處理方便, 把具有相同類型的若干元素按有序的形式組織起來的一種形式。[1]
這些有序排列的同類數(shù)據(jù)元素的集合稱為數(shù)組。
數(shù)組是用于儲存多個相同類型數(shù)據(jù)的集合。
中文名
數(shù)組
外文名
Array分????類
一維、二維(矩陣)、三維數(shù)組
定????義
同類數(shù)據(jù)元素的集合
數(shù)組產(chǎn)生來源
編輯
在C語言中, 數(shù)組[2]
屬于構(gòu)造數(shù)據(jù)類型。一個數(shù)組可以分解為多個數(shù)組元素,這些數(shù)組元素可以是基本數(shù)據(jù)類型或是構(gòu)造類型。因此按數(shù)組元素的類型不同,數(shù)組又可分為數(shù)值數(shù)組、字符數(shù)組、指針數(shù)組、結(jié)構(gòu)數(shù)組等各種類別。
關(guān)于可變長數(shù)組(VLA)的問題:原來的C89標(biāo)準(zhǔn)中是不允許可變長數(shù)組出現(xiàn)的,但是在C99標(biāo)準(zhǔn)中,加入了對VLA的支持[3]
,但是支持的編譯器不多,而且由于棧溢出的安全問題,沒有太多的人敢用這個可變長數(shù)組,所以在C11標(biāo)準(zhǔn)中又把它規(guī)定為可選實現(xiàn)的功能了[4]
。
如果有過用其它語言編程的經(jīng)歷,那么想必會熟悉數(shù)組的概念。由于有了數(shù)組,可以用相同名字引用一系列變量,并用數(shù)字(索引)來識別它們。在許多場合,使用數(shù)組可以縮短和簡化程序,因為可以利用索引值設(shè)計一個循環(huán),高效處理多種情況。數(shù)組有上界和下界,數(shù)組的元素在上下界內(nèi)是連續(xù)的。因為 Visual Basic對每一個索引值都分配空間,所以不要不切實際聲明一個太大的數(shù)組。
此處數(shù)組是程序中聲明的變量數(shù)組。它們不同于控件數(shù)組,控件數(shù)組是在設(shè)計時通過設(shè)置控件的 Index 屬性規(guī)定的。變量數(shù)組總是連續(xù)的;與控件數(shù)組不同的是,不能從一個數(shù)組的中部加載或卸載數(shù)組元素。
一個數(shù)組中的所有元素具有相同的數(shù)據(jù)類型(在C、C++、Java、pascal中都這樣。但也并非所有涉及數(shù)組的地方都這樣,比如在Visual Foxpro中的數(shù)組就并沒這樣的要求)。當(dāng)然,當(dāng)數(shù)據(jù)類型為 Variant 時,各個元素能夠包含不同種類的數(shù)據(jù)(對象、字符串、數(shù)值等等)。可以聲明任何基本數(shù)據(jù)類型的數(shù)組,包括用戶自定義類型和對象變量。
如果要用戶輸入的是一個數(shù)組,一般是用一個循環(huán),但是在輸入前也需要固定數(shù)組的大小。
compact跟變長數(shù)組沒有太大的關(guān)系,也應(yīng)該用不到變長數(shù)組。因為一般的傳數(shù)組到函數(shù)中就是傳數(shù)組的地址和元素的個數(shù)的,那只是一個提示,不是要求。
原型可以這樣寫(假設(shè)數(shù)組的元素是type):
int?compact(type?*Array,int?Count)
數(shù)組類型說明 在C語言中使用數(shù)組必須先進(jìn)行類型說明。
數(shù)組說明的一般形式為:類型說明符 數(shù)組名 [常量表達(dá)式],……; 其中,類型說明符是任一種基本數(shù)據(jù)類型或構(gòu)造數(shù)據(jù)類型。數(shù)組名是用戶定義的數(shù)組標(biāo)識符。方括號中的常量表達(dá)式表示數(shù)據(jù)元素的個數(shù),也稱為數(shù)組的長度。
數(shù)組就是一次性定義相同數(shù)據(jù)類型的一組變量數(shù)組定義。
數(shù)組舉例
說明整型數(shù)組a,有10個元素。若要表示第10個元素,則使用a[9]。第一個則是a[0]。
int?a[10];
說明實型數(shù)組b,有10個元素,實型數(shù)組c,有20個元素。
float?b[10],c[20];
說明字符數(shù)組ch,有20個元素。
char?ch[20];
數(shù)組特點(diǎn)
1.數(shù)組是相同數(shù)據(jù)類型的元素的集合。
2.數(shù)組中的各元素的存儲是有先后順序的,它們在內(nèi)存中按照這個先后順序連續(xù)存放在一起。
3.數(shù)組元素用整個數(shù)組的名字和它自己在數(shù)組中的順序位置來表示。例如,a[0]表示名字為a的數(shù)組中的第一個元素,a[1]代表數(shù)組a的第二個元素,以此類推。
對于VB的數(shù)組,表示數(shù)組元素時應(yīng)注意:
1下標(biāo)要緊跟在數(shù)組名后,而且用圓括號括起來(不能用其他括號)。
2下標(biāo)可以是常量,變量,或表達(dá)式,但其值必須是整數(shù)(如果是小數(shù)將四舍五入為整數(shù))。
3下標(biāo)必須為一段連續(xù)的整數(shù),其最小值成為下界,其最大值成為上界。不加說明時下界值默認(rèn)為1。
數(shù)組數(shù)組中的元素
編輯
數(shù)組與結(jié)構(gòu)或類中的字段的區(qū)別
數(shù)組中的所有元素都具有相同類型(這一點(diǎn)和結(jié)構(gòu)或類中的字段不同,它們可以是不同類型)。數(shù)組中的元素存儲在一個連續(xù)性的內(nèi)存塊中,并通過索引來訪問(這一點(diǎn)也和結(jié)構(gòu)和類中的字段不同,它們通過名稱來訪問)。[1]
數(shù)組類型
數(shù)組元素并非只能是基元數(shù)據(jù)類型,還可以是結(jié)構(gòu)、枚舉或類。[1]
數(shù)組結(jié)構(gòu)形式
編輯
數(shù)組棧內(nèi)存
在方法中定義的一些基本類型的變量和對象的引用變量都在方法的棧內(nèi)存中分配,當(dāng)在一段代碼中定義一個變量時,java就在棧內(nèi)存中為這個變量分配內(nèi)存空間,當(dāng)超出變量的作用域后,java會自動釋放掉為該變量所分配的內(nèi)存空間。
數(shù)組堆內(nèi)存
堆內(nèi)存用來存放由new運(yùn)算符創(chuàng)建的對象和數(shù)組,在堆中分配的內(nèi)存,由java虛擬機(jī)的自動垃圾回收器來管理。在堆中創(chuàng)建了一個數(shù)組或?qū)ο蠛?#xff0c;同時還在棧內(nèi)存中定義一個特殊的變量。讓棧內(nèi)存中的這個變量的取值等于數(shù)組或者對象在堆內(nèi)存中的首地址,棧中的這個變量就成了數(shù)組或?qū)ο蟮囊米兞?#xff0c;引用變量實際上保存的是數(shù)組或?qū)ο笤诙褍?nèi)存中的地址(也稱為對象的句柄),以后就可以在程序中使用棧的引用變量來訪問堆中的數(shù)組或?qū)ο蟆5]
數(shù)組與結(jié)構(gòu)或類中的字段的區(qū)別
數(shù)組中的所有元素都具有相同類型(這一點(diǎn)和結(jié)構(gòu)或類中的字段不同,它們可以是不同類型)。數(shù)組中的元素存儲在一個連續(xù)性的內(nèi)存塊中,并通過索引來訪問(這一點(diǎn)也和結(jié)構(gòu)和類中的字段不同,它們通過名稱來訪問)。[1]
數(shù)組相關(guān)操作
編輯
聲明固定大小的數(shù)組
有三種方法聲明固定大小的數(shù)組,用哪一種方法取決于數(shù)組應(yīng)有的有效范圍:
(1)建立公用數(shù)組,在模塊的聲明段用 Public語句聲明數(shù)組。
(2)建立模塊級數(shù)組,在模塊的聲明段用 Private語句聲明數(shù)組。
(3)建立局部數(shù)組,在過程中用 Private語句聲明數(shù)組。
設(shè)定上下界
聲明數(shù)組時,在數(shù)組名之后跟一個用括號括起來的上界。
上界不得超過 Long數(shù)據(jù)類型的范圍(-2,147,483,648 到 2,147,483,647)。
例如,下列數(shù)組聲明可出現(xiàn)、在模塊的聲明段:
Dim Counters (14) As Integer '15 個元素。
Dim Sums (20) As Double '21 個元素。
為建立公用數(shù)組,直接用 Public 取代 Dim。
Public Counters (14) As Integer
Public Sums (20) As Double
在過程之中同樣的聲明使用 Dim:
Dim Counters (14) As Integer
Dim Sums (20) As Double
第一個聲明建立了一個有 15 個元素的數(shù)組,其索引號從 0 到 14。
第二個聲明建立了一個有 21 個元素的數(shù)組,其索引號從 0 到 20。缺省的下界為 0。
為了規(guī)定下界,用關(guān)鍵字 To 顯式提供下界(為 Long數(shù)據(jù)類型):
Dim Counters (1 To 15) As Integer
Dim Sums (100 To 120) As String
在前述聲明中,Counters 的索引值范圍從 1 到 15,而 Sums 的索引值范圍從 100 到 120。
包含其它數(shù)組的數(shù)組
有可能建立 Variant數(shù)據(jù)類型數(shù)組,并與不同數(shù)據(jù)類型的數(shù)組共居一處。
以下代碼建立兩個數(shù)組,一個包含整數(shù),而另一個包含 字符串。然后聲明第三個 Variant 數(shù)組,并將整數(shù)和字符串?dāng)?shù)組放置其中:
Private Sub Command1_Click ()
Dim intX As Integer 聲明計數(shù)器變量。
聲明并放置整數(shù)數(shù)組。
Dim countersA (5) As Integer
For intX = 0 To 4
countersA (intX) = 5
Next intX
聲明并放置字符串?dāng)?shù)組。
Dim countersB (5) As String
For intX = 0 To 4
countersB (intX) = "hello"
Next intX
Dim arrX (2) As Variant 聲明擁有兩個成員的新數(shù)組。
arrX (1) = countersA () 將其它數(shù)組移居到數(shù)組。
arrX (2) = countersB ()
MsgBox arrX (1) (2) 顯示每一個數(shù)組的成員。
MsgBox arrX (2) (3)
End Sub
php數(shù)組的定義、調(diào)用和修改
array() 創(chuàng)建數(shù)組,帶有鍵和值。如果在規(guī)定數(shù)組時省略了鍵,則生成一個整數(shù)鍵,這個 key 從 0 開始,然后以 1 進(jìn)行遞增[6]
。
要用 array() 創(chuàng)建一個關(guān)聯(lián)數(shù)組,可使用 => 來分隔鍵和值。
語法
array(key => value)
參數(shù)key可選。規(guī)定 key,類型是數(shù)值或字符串。如果未設(shè)置,則生成整數(shù)類型的 key。
value必需。規(guī)定值。
輸出aaaaaabbbbbb
$array = array("key1" => "aaaaaa", 2 => "bbbbbb"); //數(shù)組的創(chuàng)建
echo $array["key1"]; //輸出aaaaaa
echo $array[2]; //輸出bbbbbb
?>
數(shù)組遍歷數(shù)組
C#提供了foreach語句來遍歷數(shù)組的所有元素。[7]
int[]?arr?=?{?1,?2,?4,?5,?9,?7,?13?};
foreach(int?a?in?arr)
{
Console.WriteLine(a);
}
數(shù)組數(shù)組類型
編輯
數(shù)組多維數(shù)組
有時需要追蹤記錄數(shù)組中的相關(guān)信息。
例如,為了追蹤記錄計算機(jī)屏幕上的每一個像素,需要引用它的 X、Y坐標(biāo)。這時應(yīng)該用多維數(shù)組存儲值。
可用 Visual Basic 聲明多維數(shù)組。
例如,下面的語句聲明了一個過程內(nèi)的 10 × 10 的二維數(shù)組。
Static MatrixA (9,9) As Double
可用顯式下界來聲明兩個維數(shù)或兩個維數(shù)中的任何一個:
Static MatrixA (1 To 10,1 To 10) As Double
可以將所有這些推廣到二維以上的數(shù)組。例如:
Dim MultiD (3,1 To 10,1 To 15)
這個聲明建立了三維數(shù)組,大小為 4 × 10 × 15。元素總數(shù)為三個維數(shù)的乘積,為 600。
注意
在增加數(shù)組的維數(shù)時,數(shù)組所占的存儲空間會大幅度增加,所以要慎用多維數(shù)組。使用 Variant 數(shù)組時更要格外小心,因為他們需要更大的存儲空間。
數(shù)組用循環(huán)操作數(shù)組
可以用 For循環(huán)嵌套有效的處理多維數(shù)組。例如,在 MatrixA 中基于每個元素在數(shù)組中的位置為其賦值:
Dim I As Integer,J As Integer
Static MatrixA(1 To 10,1 To 10) As Double
For I = 1 To 10
For J = 1 To 10
MatrixA (I,J) = I * 10 + J
Next J
Next I
數(shù)組一維數(shù)組
定義
一維數(shù)組是最簡單的數(shù)組,其邏輯結(jié)構(gòu)是線性表。要使用一維數(shù)組,需經(jīng)過定義、初始化和應(yīng)用等過程。
數(shù)組聲明
在數(shù)組的聲明格式里,“數(shù)據(jù)類型”是聲明數(shù)組元素的數(shù)據(jù)類型,可以是java語言中任意的數(shù)據(jù)類型,包括簡單類型和結(jié)構(gòu)類型。“數(shù)組名”是用來統(tǒng)一這些相同數(shù)據(jù)類型的名稱,其命名規(guī)則和變量的命名規(guī)則相同。
數(shù)組聲明之后,接下來便是要分配數(shù)組所需要的內(nèi)存,這時必須用運(yùn)算符new,其中“個數(shù)”是告訴編譯器,所聲明的數(shù)組要存放多少個元素,所以new運(yùn)算符是通知編譯器根據(jù)括號里的個數(shù),在內(nèi)存中分配一塊空間供該數(shù)組使用。利用new運(yùn)算符為數(shù)組元素分配內(nèi)存空間的方式稱為動態(tài)分配方式。
舉例:
int[]x; //聲明名稱為x的int型數(shù)組
x=new int[10]; //x數(shù)組中包含有10個元素,并為這10個元素分配內(nèi)存空間
在聲明數(shù)組時,也可以將兩個語句合并成一行,格式如下:
數(shù)據(jù)類型[]數(shù)組名= new 數(shù)據(jù)類型[個數(shù)];
利用這種格式在聲明數(shù)組的同時,也分配一塊內(nèi)存供數(shù)組使用。如上面的例子可以寫成:
int[]x = new int [10];
等號左邊的int[]x相當(dāng)于定義了一個特殊的變量x,x的數(shù)據(jù)類型是一個對int型數(shù)組對象的引用,x就是一個數(shù)組的引用變量,其引用的數(shù)組元素個數(shù)不定。等號右邊的new int[10]就是在堆內(nèi)存中創(chuàng)建一個具有10個int型變量的數(shù)組對象。int[]x = new int [10];就是將右邊的數(shù)組對象賦值給左邊的數(shù)組引用變量。[5]
數(shù)組二維數(shù)組
定義
前面介紹的數(shù)組只有一個下標(biāo),稱為一維數(shù)組, 其數(shù)組元素也稱為單下標(biāo)變量。在實際問題中有很多量是二維的或多維的, 因此C語言允許構(gòu)造多維數(shù)組。多維數(shù)組元素有多個下標(biāo), 以標(biāo)識它在數(shù)組中的位置,所以也稱為多下標(biāo)變量。本小節(jié)只介紹二維數(shù)組,多維數(shù)組可由二維數(shù)組類推而得到。二維數(shù)組類型說明的一般形式是:
類型說明符數(shù)組名[常量表達(dá)式2]…;
其中常量表達(dá)式1表示第一維下標(biāo)的長度,常量表達(dá)式2 表示第二維下標(biāo)的長度。例如:
int a[3][4]; 說明了一個三行四列的數(shù)組,數(shù)組名為a,其下標(biāo)變量的類型為整型。該數(shù)組的下標(biāo)變量共有3×4個,即:
a[0][0],a[0][1],a[0][2],a[0][3]
a[1][0],a[1][1],a[1][2],a[1][3]
a[2][0],a[2][1],a[2][2],a[2][3]
二維數(shù)組在概念上是二維的,即是說其下標(biāo)在兩個方向上變化, 下標(biāo)變量在數(shù)組中的位置也處于一個平面之中, 而不是象一維數(shù)組只是一個向量。但是,實際的硬件存儲器卻是連續(xù)編址的, 也就是說存儲器單元是按一維線性排列的。如何在一維存儲器中存放二維數(shù)組,可有兩種方式:一種是按行排列, 即放完一行之后順次放入第二行。另一種是按列排列, 即放完一列之后再順次放入第二列。在C語言中,二維數(shù)組是按行排列的。在如上中,按行順次存放,先存放a[0]行,再存放a[1]行,最后存放a[2]行。每行中有四個元素也是依次存放。由于數(shù)組a說明為
int類型,該類型占兩個字節(jié)的內(nèi)存空間,所以每個元素均占有兩個 字節(jié)(圖中每一格為一字節(jié))。
數(shù)組三維數(shù)組
三維數(shù)組,是指維數(shù)為三的數(shù)組結(jié)構(gòu)。三維數(shù)組是最常見的多維數(shù)組,由于其可以用來描述三維空間中的位置或狀態(tài)而被廣泛使用。
三維數(shù)組就是維度為三的數(shù)組,可以認(rèn)為它表示對該數(shù)組存儲的內(nèi)容使用了三個獨(dú)立參量去描述,但更多的是認(rèn)為該數(shù)組的下標(biāo)是由三個不同的參量組成的。
數(shù)組這一概念主要用在編寫程序當(dāng)中,和數(shù)學(xué)中的向量、矩陣等概念有一定的差別,主要表現(xiàn):在數(shù)組內(nèi)的元素可以是任意的相同數(shù)據(jù)類型,包括向量和矩陣。
對數(shù)組的訪問一般是通過下標(biāo)進(jìn)行的。在三維數(shù)組中,數(shù)組的下標(biāo)是由三個數(shù)字構(gòu)成的,通過這三個數(shù)字組成的下標(biāo)對數(shù)組的內(nèi)容進(jìn)行訪問。
元素的表示方法
二維數(shù)組的元素也稱為雙下標(biāo)變量,其表示的形式為:數(shù)組名[下標(biāo)][下標(biāo)]
其中下標(biāo)應(yīng)為整型常量或整型表達(dá)式。例如:a[3][4] 表示a數(shù)組三行四列的元素。
下標(biāo)變量和數(shù)組說明在形式中有些相似,但這兩者具有完全不同的含義。數(shù)組說明的方括號中給出的是某一維的長度,即可取下標(biāo)的最大值; 而數(shù)組元素中的下標(biāo)是該元素在數(shù)組中的位置標(biāo)識。前者只能是常量, 后者可以是常量,變量或表達(dá)式。
一個學(xué)習(xí)小組有5個人,每個人有三門課的考試成績。求全組分科的平均成績和各科總平均成績。
課程 成績姓名Math C DBASE
張 80 75 92
王 61 65 71
李 59 63 70
趙 85 87 90
周 76 77 85
可設(shè)一個二維數(shù)組a[5][3]存放五個人三門課的成績。再設(shè)一個一維數(shù)組v[3]存放所求得各分科平均成績,設(shè)變量l為全組各科總平均成績。編程如下:
void?main()
{
int?i,j,s=0,l,v[3],a[5][3];
printf("input?score\n");
for(i=0;i<3;i++){
for(j=0;j<5;j++)
{?scanf("%d",&a[j][i]);
s=s+a[j][i];}
v[i]=s/5;
s=0;
}
l=(v[0]+v[1]+v[2])/3;
printf("math:%d\nc?languag:%d\ndbase:%d\n",v[0],v[1],v[2]);
printf("total:%d\n",l);
}
程序中首先用了一個雙重循環(huán)。在內(nèi)循環(huán)中依次讀入某一門課程的各個學(xué)生的成績,并把這些成績累加起來, 退出內(nèi)循環(huán)后再把該累加成績除以5送入v之中,這就是該門課程的平均成績。外循環(huán)共循環(huán)三次,分別求出三門課各自的平均成績并存放在v數(shù)組之中。退出外循環(huán)之后,把v[0],v[1],v[2]相加除以3即得到各科總平均成績。最后按題意輸出各個成績。
初始化
二維數(shù)組初始化也是在類型說明時給各下標(biāo)變量賦以初值。二維數(shù)組可按行分段賦值,也可按行連續(xù)賦值。例如對數(shù)組a[5][3]:
1.按行分段賦值可寫為static int a[5][3]={{80,75,92},{61,65,71},{59,63,70},{85,87,90},{76,77,85}};
2.按行連續(xù)賦值可寫為static int a[5][3]={{80,75,92,61,65,71,59,63,70,85,87,90,76,77,85 }};
這兩種賦初值的結(jié)果是完全相同的。
void?main()
{
int?i,j,s=0,l,v[3];
static?int?a[5][3]={?{80,75,92},{61,65,71},{59,63,70},
{85,87,90},{76,77,85}?};
for(i=0;i<3;i++)
{?for(j=0;j<5;j++)
s=s+a[j];
v=s/5;
s=0;
}
l=(v[0]+v[1]+v[2])/3;
printf("math:%d\nc?languag:%d\ndbase:%d\n",v[0],v[1],v[2]);
printf("total:%d\n",l);
}
初始化的額外說明
對于二維數(shù)組初始化賦值還有以下說明:
1.可以只對部分元素賦初值,未賦初值的元素自動取0值。
例如:static int a[3][3]={,,}; 是對每一行的第一列元素賦值,未賦值的元素取0值。賦值后各元素的值為:1 0 02 0 03 0 0
static int a [3][3]={{0,1},{0,0,2},}; 賦值后的元素值為 0 1 00 0 23 0 0
2.如對全部元素賦初值,則第一維的長度可以不給出。
例如:static int a[3][3]={1,2,3,4,5,6,7,8,9}; 可以寫為:static int a[][3]={1,2,3,4,5,6,7,8,9};
分解
數(shù)組是一種構(gòu)造類型的數(shù)據(jù)。二維數(shù)組可以看作是由一維數(shù)組的嵌套而構(gòu)成的。設(shè)一維數(shù)組的每個元素都又是一個數(shù)組, 就組成了二維數(shù)組。當(dāng)然,前提是各元素類型必須相同。
根據(jù)這樣的分析,一個二維數(shù)組也可以分解為多個一維數(shù)組。C語言允許這種分解有二維數(shù)組a[3][4],可分解為三個一維數(shù)組,其數(shù)組名分別為a[0],a[1],a[2]。對這三個一維數(shù)組不需另作說明即可使用。這三個一維數(shù)組都有4個元素,例如:一維數(shù)組a[0]的元素為a[0][0],a[0][1],a[0][2],a[0][3]。最后必須強(qiáng)調(diào)的是,a[0],a[1],a[2]不能當(dāng)作下標(biāo)變量使用,它們是數(shù)組名,不是一個單純的下標(biāo)變量。
數(shù)組字符數(shù)組
用來存放字符量的數(shù)組稱為字符數(shù)組。
字符數(shù)組類型說明的形式與前面介紹的數(shù)值數(shù)組相同。例如:char c[10]; 由于字符型和整型通用,也可以定義為int c[10]但這時每個數(shù)組元素占2個字節(jié)的內(nèi)存單元。
字符數(shù)組也可以是二維或多維數(shù)組,例如:char c[5][10];即為二維字符數(shù)組。
字符數(shù)組也允許在類型說明時作初始化賦值。例如:static char c[10]={`c`,` `,`p`,`r`,o`,g`,r`,`a`,`m`};賦值后各元素的值為:數(shù)組C c[0]c[1]c[2]c[3]c[4]c [5]c[6]c[7]c[8]c[9]其中c[9]未賦值,由系統(tǒng)自動賦予0值。
當(dāng)對全體元素賦初值時也可以省去長度說明。例如:static char c[]={`c`,` `,`p`,`r`,`o`,`g`,`r`,`a`,`m`};這時C數(shù)組的長度自動定為9。
main()
{
int?i,j;
char?a[][5]={{'B','A','S','I','C',},{'d','B','A','S','E'}};
for(i=0;i<=1;i++)
{
for(j=0;j<=4;j++)
printf("%c",a[j]);
printf("\n");
}
}
本例的二維字符數(shù)組由于在初始化時全部元素都賦以初值, 因此一維下標(biāo)的長度可以不加以說明。字符串在C語言中沒有專門的字符串變量, 通常用一個字符數(shù)組來存放一個字符串。在2.1.4節(jié)介紹字符串常量時,已說明字符串總是以'\0'作為串的結(jié)束符。因此當(dāng)把一個字符串存入一個數(shù)組時, 也把結(jié)束符'\0'存入數(shù)組,并以此作為該字符串是否結(jié)束的標(biāo)志。有了'\0'標(biāo)志后,就不必再用字符數(shù)組的長度來判斷字符串的長度了。
C語言允許用字符串的方式對數(shù)組作初始化賦值。例如:
char?c[]?=?{'c',?'?',?'p',?'r',?'o',?'g',?'r',?'a',?'m'?};
可寫為:
char?c[]?=?{?"C?program"?};
或去掉大括號,寫為:
char?c[]?=?"C?program";
用字符串方式賦值比用字符逐個賦值要多占一個字節(jié), 用于存放字符串結(jié)束標(biāo)志'\0'。上面的數(shù)組c在內(nèi)存中的實際存放情況為:C program'\0'是由C編譯系統(tǒng)自動加上的。由于采用了'\0'標(biāo)志,所以在用字符串賦初值時一般無須指定數(shù)組的長度, 而由系統(tǒng)自行處理。在采用字符串方式后,字符數(shù)組的輸入輸出將變得簡單方便。除了上述用字符串賦初值的辦法外,還可用scanf函數(shù)和printf函數(shù)一次性輸入輸出一個字符數(shù)組中的字符串, 而不必使用循環(huán)語句逐個地輸入輸出每個字符。
int?main()
{
static?char?c[]="BASIC\ndBASE";
printf("%s\n",c);
return?0;
}
注意在本例的printf函數(shù)中,使用的格式字符串為“%s”,表示輸出的是一個字符串。而在輸出表列中給出數(shù)組名則可。
本例中由于定義數(shù)組長度為15, 因此輸入的字符串長度必須小于15,以留出一個字節(jié)用于存放字符串結(jié)束標(biāo)志'\0'。應(yīng)該說明的是,對一個字符數(shù)組,如果不作初始化賦值,則必須說明數(shù)組長度。還應(yīng)該特別注意的是,當(dāng)用scanf函數(shù)輸入字符串時,字符串中不能含有空格,否則將以空格作為串的結(jié)束符。例如運(yùn)行例4.8,當(dāng)輸入的字符串中含有空格時,運(yùn)行情況為:input string:this is a book this 從輸出結(jié)果可以看出空格以后的字符都未能輸出。為了避免這種情況,可多設(shè)幾個字符數(shù)組分段存放含空格的串。程序可改寫如下:
int
main()
{
char?st1[6],?st2[6],?st3[6],?st4[6];
printf("input?string:\n");
scanf("%s%s%s%s",?st1,?st2,?st3,?st4?);
printf("%s?%s?%s?%s\n",?st1,?st2,?st3,?st4);
return?0;
}
本程序分別設(shè)了四個數(shù)組, 輸入的一行字符的空格分段分別裝入四個數(shù)組。然后分別輸出這四個數(shù)組中的字符串。在前面介紹過,scanf的各輸入項必須以地址方式出現(xiàn),如 &a,&b等。但在例4.8中卻是以數(shù)組名方式出現(xiàn)的,這是為什么呢?這是由于在C語言中規(guī)定,數(shù)組名就代表了該數(shù)組的首地址。整個數(shù)組是以首地址開頭的一塊連續(xù)的內(nèi)存單元。如有字符數(shù)組char c[10],在內(nèi)存可表示如圖4.2。設(shè)數(shù)組c的首地址為2000,也就是說c[0]單元地址為2000。則數(shù)組名c就代表這個首地址。因此在c前面不能再加地址運(yùn)算符&。如寫作scanf("%s",&c);則是錯誤的。在執(zhí)行函數(shù)printf("%s",c) 時,按數(shù)組名c找到首地址,然后逐個輸出數(shù)組中各個字符直到遇到字符串終止標(biāo)志'\0'為止。
數(shù)組表示方法
編輯
數(shù)組元素是組成數(shù)組的基本單元。數(shù)組元素也是一種變量, 其標(biāo)識方法為數(shù)組名后跟一個下標(biāo)。下標(biāo)表示了元素在數(shù)組中的順序號。數(shù)組元素的一般形式為:數(shù)組名[下標(biāo)] 其中的下標(biāo)只能為整型常量或整型表達(dá)式。如為小數(shù)時,C編譯將自動取整。例如,a[5],a[i+j],a[i++]都是合法的數(shù)組元素。數(shù)組元素通常也稱為下標(biāo)變量。必須先定義數(shù)組, 才能使用下標(biāo)變量。在C語言中只能逐個地使用下標(biāo)變量, 而不能一次引用整個數(shù)組。
數(shù)組賦值方法
編輯
初始化賦值的一般形式為:static類型說明符數(shù)組名[值,值……值}; 其中static表示是靜態(tài)存儲類型, C語言規(guī)定只有靜態(tài)存儲數(shù)組和外部存儲數(shù)組才可作初始化賦值(有關(guān)靜態(tài)存儲,外部存儲的概念在第五章中介紹)。
在{ }中的各數(shù)據(jù)值即為各元素的初值, 各值之間用逗號間隔。例如:static int a[10]={ 0,1,2,3,4,5,6,7,8,9 }; 相當(dāng)于a[0]=0;a[1]=1...a[9]=9;
數(shù)組使用規(guī)則
編輯
1.數(shù)組的類型實際上是指數(shù)組元素的取值類型。對于同一個數(shù)組,其所有元素的數(shù)據(jù)類型都是相同的。
2.數(shù)組名的書寫規(guī)則應(yīng)符合標(biāo)識符的書寫規(guī)定。
3.數(shù)組名不能與其它變量名相同。
1.可以只給部分元素賦初值。當(dāng){ }中值的個數(shù)少于元素個數(shù)時,只給前面部分元素賦值。例如:static int a[10]={0,1,2,3,4};表示只給a[0]~a[4]5個元素賦值,而后5個元素自動賦0值。
2.只能給元素逐個賦值,不能給數(shù)組整體賦值。例如給十個元素全部賦1值,只能寫為:static int a[10]={1,1,1,1,1,1,1,1,1,1};而不能寫為:static int a[10]=1;(請注意:在C、C#語言中是這樣,但并非在所有涉及數(shù)組的地方都這樣,數(shù)據(jù)庫是從1開始。)
3.若不給可初始化的數(shù)組賦初值,則全部元素均為0值。
4.假如給全部元素賦值,則在數(shù)組說明中, 可以不給出數(shù)組元素的個數(shù)。例如:static int a[5]={1,2,3,4,5};可寫為:static int a[]={1,2,3,4,5};動態(tài)賦值可以在程序執(zhí)行過程中,對數(shù)組作動態(tài)賦值。這時可用循環(huán)語句配合scanf函數(shù)逐個對數(shù)組元素賦值。
數(shù)組常用函數(shù)
編輯
C語言提供了豐富的字符串處理函數(shù), 大致可分為字符串的輸入、輸出、合并、修改、比較、轉(zhuǎn)換、復(fù)制、搜索幾類。使用這些函數(shù)可大大減輕編程的負(fù)擔(dān)。用于輸入輸出的字符串函數(shù), 在使用前應(yīng)包含頭文件"stdio.h" ; 使用其它字符串函數(shù)則應(yīng)包含頭文件"string.h"。
數(shù)組幾個常用函數(shù)
下面介紹幾個最常用的字符串函數(shù):
1.字符串輸出函數(shù)puts格式:puts (字符數(shù)組名) 功能:把字符數(shù)組中的字符串輸出到顯示器。即在屏幕上顯示該字符串
#include"stdio.h"
main()
{
static?char?c[]="BASIC\ndBASE";
puts(c);
}
static?char?c[]="BASIC\ndBASE";
puts(c);
從程序中可以看出puts函數(shù)中可以使用轉(zhuǎn)義字符, 因此輸出結(jié)果成為兩行。puts函數(shù)完全可以由printf函數(shù)取代。當(dāng)需要按一定格式輸出時,通常使用printf函數(shù)。
2.字符串輸入函數(shù)gets格式:gets (字符數(shù)組名) 功能:從標(biāo)準(zhǔn)輸入設(shè)備鍵盤上輸入一個字符串。本函數(shù)得到一個函數(shù)值,即為該字符數(shù)組的首地址。
#include"stdio.h"
main()
{
char?st[15];
printf("input?string:\n");
gets(st);
puts(st);
}
可以看出當(dāng)輸入的字符串中含有空格時,輸出仍為全部字符串。說明gets函數(shù)并不以空格作為字符串輸入結(jié)束的標(biāo)志, 而只以回車作為輸入結(jié)束。這是與scanf函數(shù)不同的。
3.字符串連接函數(shù)strcat格式:strcat (字符數(shù)組名1,字符數(shù)組名2) 功能:把字符數(shù)組2中的字符串連接到字符數(shù)組1 中字符串的后面,并刪去字符串1后的串標(biāo)志“”。本函數(shù)返回值是字符數(shù)組1的首地址,而且需要字符串處理函數(shù)的包含頭文件 #include"string.h" ,程序如下:
#include"string.h"
main()
{
static?char?st1[30]="My?name?is?";
int?st2[10];
printf("input?your?name:\n");
gets(st2);
strcat(st1,st2);
puts(st1);
}
static?char?st1[30]="My?name?is?";
int?st2[10];
printf("input?your?name:\n");
gets(st2);
strcat(st1,st2);
本程序把初始化賦值的字符數(shù)組與動態(tài)賦值的字符串連接起來。要注意的是,字符數(shù)組1應(yīng)定義足夠的長度,否則不能全部裝入被連接的字符串。
4.字符串拷貝函數(shù)strcpy格式:strcpy (字符數(shù)組名1,字符數(shù)組名2) 的功能:把字符數(shù)組2中的字符串拷貝到字符數(shù)組1中。串結(jié)束標(biāo)志“”也一同拷貝。字符數(shù)名2, 也可以是一個字符串常量。這時相當(dāng)于把一個字符串賦予一個字符數(shù)組。
#include"string.h"
main()
{
static?char?st1[15],st2[]="C?Language";
strcpy(st1,st2);
puts(st1);printf("\n");
}
static?char?st1[15],st2[]="C?Language";
strcpy(st1,st2);
本函數(shù)要求字符數(shù)組1應(yīng)有足夠的長度,否則不能全部裝入所拷貝的字符串。
5.字符串比較函數(shù)strcmp格式:strcmp(字符數(shù)組名1,字符數(shù)組名2) 功能:按照ASCII碼順序比較兩個數(shù)組中的字符串,并由函數(shù)返回值返回比較結(jié)果。
字符串1=字符串2,返回值=0;
字符串1〉字符串2,返回值〉0;
字符串1〈字符串2,返回值〈0。
本函數(shù)也可用于比較兩個字符串常量,或比較數(shù)組和字符串常量。
#include"string.h"
main()
{ int k;
static char st1[15],st2[]="C Language";
printf("input a string:\n");
gets(st1);
k=strcmp(st1,st2);
if(k==0) printf("st1=st2\n");
if(k>0) printf("st1>st2\n");
if(k<0) printf("st1
}
{ int k;
static char st1[15],st2[]="C Language";
printf("input a string:\n");
gets(st1);
k=strcmp(st1,st2);
if(k==0) printf("st1=st2\n");
if(k>0) printf("st1>st2\n");
if(k<0) printf("st1
}
本程序中把輸入的字符串和數(shù)組st2中的串比較,比較結(jié)果返回到k中,根據(jù)k值再輸出結(jié)果提示串。當(dāng)輸入為dbase時,由ASCII 碼可知“dBASE”大于“C Language”故k〉0,輸出結(jié)果“st1>st2”。
6.測字符串長度函數(shù)strlen格式:strlen(字符數(shù)組名) 功能:測字符串的實際長度(不含字符串結(jié)束標(biāo)志‘’) 并作為函數(shù)返回值。
數(shù)組PHP 5 Array 函數(shù)
函數(shù) 描述
array() 創(chuàng)建數(shù)組。
array_change_key_case() 返回其鍵均為大寫或小寫的數(shù)組。
array_chunk() 把一個數(shù)組分割為新的數(shù)組塊。
array_column() 返回輸入數(shù)組中某個單一列的值。
array_combine() 通過合并兩個數(shù)組(一個為鍵名數(shù)組,一個為鍵值數(shù)組)來創(chuàng)建一個新數(shù)組。
array_count_values() 用于統(tǒng)計數(shù)組中所有值出現(xiàn)的次數(shù)。
array_diff() 比較數(shù)組,返回兩個數(shù)組的差集(只比較鍵值)。
array_diff_assoc() 比較數(shù)組,返回兩個數(shù)組的差集(比較鍵名和鍵值)。
array_diff_key() 比較數(shù)組,返回兩個數(shù)組的差集(只比較鍵名)。
array_diff_uassoc() 比較數(shù)組,返回兩個數(shù)組的差集(比較鍵名和鍵值,使用用戶自定義的鍵名 比較函數(shù))。
array_diff_ukey() 比較數(shù)組,返回兩個數(shù)組的差集(只比較鍵名,使用用戶自定義的鍵名比較 函數(shù))。
array_fill() 用給定的鍵值填充數(shù)組。
array_fill_keys() 用給定的指定鍵名的鍵值填充數(shù)組。
array_filter() 用回調(diào)函數(shù)過濾數(shù)組中的元素。
array_flip() 反轉(zhuǎn)/交換數(shù)組中的鍵名和對應(yīng)關(guān)聯(lián)的鍵值。
array_intersect() 比較數(shù)組,返回兩個數(shù)組的交集(只比較鍵值)。
array_intersect_assoc() 比較數(shù)組,返回兩個數(shù)組的交集(比較鍵名和鍵值)。
array_intersect_key() 比較數(shù)組,返回兩個數(shù)組的交集(只比較鍵名)。
array_intersect_uassoc() 比較數(shù)組,返回兩個數(shù)組的交集(比較鍵名和鍵值,使用用戶自定義的鍵名 比較函數(shù))。
array_intersect_ukey() 比較數(shù)組,返回兩個數(shù)組的交集(只比較鍵名,使用用戶自定義的鍵名比較 函數(shù))。
array_key_exists() 檢查指定的鍵名是否存在于數(shù)組中。
array_keys() 返回數(shù)組中所有的鍵名。
array_map() 將用戶自定義函數(shù)作用到給定數(shù)組的每個值上,返回新的值。
array_merge() 把一個或多個數(shù)組合并為一個數(shù)組。
array_merge_recursive() 遞歸地把一個或多個數(shù)組合并為一個數(shù)組。
數(shù)組JAVA Eclipse 的Array函數(shù)
import?java.util.Arrays;//這一行的作用是載入Arrays模塊//import?java.util.Array.prototype.indexOf
public?class?shuzhu1?{
public?static?void?main(String?args[])?{
int[]?a={1,3,6,2,7,9};
System.out.println("排序前的數(shù)組為:");
System.out.println(Arrays.toString(a));//調(diào)用Arrays.toString將數(shù)組a的值 //轉(zhuǎn)換為字符串并?顯示出來 //調(diào)用Array.sort方法,對數(shù)組進(jìn)行排序
Arrays.sort(a);
System.out?.println("排序后的數(shù)組為:");
//System.out.println(a+"?");若為此種寫法,輸出結(jié)果將出現(xiàn)亂碼
System.out.println(Arrays.toString(a));//調(diào)用Arrays.toString將數(shù)組a //的值轉(zhuǎn)換為字符串并?顯示出來
參考資料
1.
John Sharp.Visual C#從入門到精通:清華大學(xué)出版社,2016:185
2.
C語言一維數(shù)組的定義和引用
.c語言中文網(wǎng)[引用日期2014-12-21]
3.
C語言標(biāo)準(zhǔn)化委員會(ISO/IEC JTC1/SC22/WG14).ISO/IEC 9899:1999 (E).瑞士:國際標(biāo)準(zhǔn)化組織(ISO)、國際電工委員會(IEC),1999:xi
4.
C語言標(biāo)準(zhǔn)化委員會(ISO/IEC JTC1/SC22/WG14).ISO/IEC 9899:2011 (E).瑞士:國際標(biāo)準(zhǔn)化組織(ISO)、國際電工委員會(IEC),2011:177
5.
陳國君.Java程序設(shè)計基礎(chǔ).北京:清華大學(xué)出版社,2011年:56-57
6.
php數(shù)組的定義、調(diào)用和修改
.idcpcw[引用日期2013-04-23]
7.
John Sharp.Visual C#從入門到精通:清華大學(xué)出版社,2016年:189
總結(jié)
以上是生活随笔為你收集整理的java中数组的含义_数组的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2018java二级考试大纲_2018年
- 下一篇: java 类的存储结构设计_Doris存