數組

數組

所謂數組,是有序的元素序列。若將有限個類型相同的變數的集合命名,那么這個名稱為數組名。組成數組的各個變數稱為數組的分量,也稱為數組的元素,有時也稱為下標變數。用於區分數組的各個元素的數字編號稱為下標。數組是在程式設計中,為了處理方便, 把具有相同類型的若干元素按無序的形式組織起來的一種形式。這些無序排列的同類數據元素的集合稱為數組。

數組是用於儲存多個相同類型數據的集合。

基本介紹

  • 中文名:數組
  • 外文名:Array
  • 分類:一維、二維(矩陣)、三維數組
  • 定義:同類數據元素的集合
產生來源,舉例,特點,數組中的元素,與結構或類中的欄位的區別,類型,結構形式,棧記憶體,堆記憶體,與結構或類中的欄位的區別,相關操作,遍歷數組,數組類型,多維數組,用循環運算元組,一維數組,二維數組,三維數組,字元數組,表示方法,賦值方法,使用規則,常用函式,幾個常用函式,PHP 5 Array 函式,JAVA Eclipse 的Array函式,

產生來源

在C語言中, 數組屬於構造數據類型。一個數組可以分解為多個數組元素,這些數組元素可以是基本數據類型或是構造類型。因此按數組元素的類型不同,數組又可分為數值數組、字元數組、指針數組、結構數組等各種類別。
關於可變長數組(VLA)的問題:原來的C89標準中是不允許可變長數組出現的,但是在C99標準中,加入了對VLA的支持,但是支持的編譯器不多,而且由於棧溢出的安全問題,沒有太多的人敢用這個可變長數組,所以在C11標準中又把它規定為可選實現的功能了。
如果有過用其它語言編程的經歷,那么想必會熟悉數組的概念。由於有了數組,可以用相同名字引用一系列變數,並用數字(索引)來識別它們。在許多場合,使用數組可以縮短和簡化程式,因為可以利用索引值設計一個循環,高效處理多種情況。數組有上界和下界,數組的元素在上下界內是連續的。因為 Visual Basic對每一個索引值都分配空間,所以不要不切實際聲明一個太大的數組。
此處數組是程式中聲明的變數數組。它們不同於控制項數組,控制項數組是在設計時通過設定控制項的 Index 屬性規定的。變數數組總是連續的;與控制項數組不同的是,不能從一個數組的中部載入或卸載數組元素。
一個數組中的所有元素具有相同的數據類型(在C、C++、Java、pascal中都這樣。但也並非所有涉及數組的地方都這樣,比如在Visual Foxpro中的數組就並沒這樣的要求)。當然,當數據類型為 Variant 時,各個元素能夠包含不同種類的數據(對象、字元串、數值等等)。可以聲明任何基本數據類型的數組,包括用戶自定義類型和對象變數。
如果要用戶輸入的是一個數組,一般是用一個循環,但是在輸入前也需要固定數組的大小。
compact跟變長數組沒有太大的關係,也應該用不到變長數組。因為一般的傳數組到函式中就是傳數組的地址和元素的個數的,那只是一個提示,不是要求。
原型可以這樣寫(假設數組的元素是type):
int compact(type *Array,int Count)
數組類型說明 在C語言中使用數組必須先進行類型說明。
數組說明的一般形式為:類型說明符 數組名 [常量表達式],……; 其中,類型說明符是任一種基本數據類型或構造數據類型。數組名是用戶定義的數組標識符。方括弧中的常量表達式表示數據元素的個數,也稱為數組的長度。
數組就是一次性定義相同數據類型的一組變數數組定義。

舉例

int a[10]; 說明整型數組a,有10個元素。若要表示第10個元素,則使用a[9]。第一個則是a[0]。
float b[10],c[20]; 說明實型數組b,有10個元素,實型數組c,有20個元素。
char ch[20]; 說明字元數組ch,有20個元素。

特點

1.數組是相同數據類型的元素的集合。
2.數組中的各元素的存儲是有先後順序的,它們在記憶體中按照這個先後順序連續存放在一起。
3.數組元素用整個數組的名字和它自己在數組中的順序位置來表示。例如,a[0]表示名字為a的數組中的第一個元素,a[1]代表數組a的第二個元素,以此類推。
對於VB的數組,表示數組元素時應注意:
1下標要緊跟在數組名後,而且用圓括弧括起來(不能用其他括弧)。
2下標可以是常量,變數,或表達式,但其值必須是整數(如果是小數將四捨五入為整數)。
3下標必須為一段連續的整數,其最小值成為下界,其最大值成為上界。不加說明時下界值默認為1。

數組中的元素

與結構或類中的欄位的區別

數組中的所有元素都具有相同類型(這一點和結構或類中的欄位不同,它們可以是不同類型)。數組中的元素存儲在一個連續性的記憶體塊中,並通過索引來訪問(這一點也和結構和類中的欄位不同,它們通過名稱來訪問)。

類型

數組元素並非只能是基元數據類型,還可以是結構、枚舉或類。

結構形式

棧記憶體

在方法中定義的一些基本類型的變數和對象的引用變數都在方法的棧記憶體中分配,當在一段代碼中定義一個變數時,java就在棧記憶體中為這個變數分配記憶體空間,當超出變數的作用域後,java會自動釋放掉為該變數所分配的記憶體空間。

堆記憶體

堆記憶體用來存放由new運算符創建的對象和數組,在堆中分配的記憶體,由java虛擬機的自動垃圾回收器來管理。在堆中創建了一個數組或對象後,同時還在棧記憶體中定義一個特殊的變數。讓棧記憶體中的這個變數的取值等於數組或者對象在堆記憶體中的首地址,棧中的這個變數就成了數組或對象的引用變數,引用變數實際上保存的是數組或對象在堆記憶體中的地址(也稱為對象的句柄),以後就可以在程式中使用棧的引用變數來訪問堆中的數組或對象。

與結構或類中的欄位的區別

數組中的所有元素都具有相同類型(這一點和結構或類中的欄位不同,它們可以是不同類型)。數組中的元素存儲在一個連續性的記憶體塊中,並通過索引來訪問(這一點也和結構和類中的欄位不同,它們通過名稱來訪問)。

相關操作

聲明固定大小的數組
有三種方法聲明固定大小的數組,用哪一種方法取決於數組應有的有效範圍:
(1)建立公用數組,在模組的聲明段用 Public語句聲明數組。
(2)建立模組級數組,在模組的聲明段用 Private語句聲明數組。
(3)建立局部數組,在過程中用 Private語句聲明數組。
設定上下界
聲明數組時,在數組名之後跟一個用括弧括起來的上界
上界不得超過 Long數據類型的範圍(-2,147,483,648 到 2,147,483,647)。
例如,下列數組聲明可出現、在模組的聲明段:
Dim Counters (14) As Integer '15 個元素。
Dim Sums (20) As Double '21 個元素。
為建立公用數組,直接用 Public 取代 Dim。
Public Counters (14) As Integer
Public Sums (20) As Double
在過程之中同樣的聲明使用 Dim:
Dim Counters (14) As Integer
Dim Sums (20) As Double
第一個聲明建立了一個有 15 個元素的數組,其索引號從 0 到 14。
第二個聲明建立了一個有 21 個元素的數組,其索引號從 0 到 20。預設的下界為 0。
為了規定下界,用關鍵字 To 顯式提供下界(為 Long數據類型):
Dim Counters (1 To 15) As Integer
Dim Sums (100 To 120) As String
在前述聲明中,Counters 的索引值範圍從 1 到 15,而 Sums 的索引值範圍從 100 到 120。
包含其它數組的數組
有可能建立 Variant數據類型數組,並與不同數據類型的數組共居一處。
以下代碼建立兩個數組,一個包含整數,而另一個包含 字元串。然後聲明第三個 Variant 數組,並將整數和字元串數組放置其中:
Private Sub Command1_Click ()
Dim intX As Integer 聲明計數器變數。
聲明並放置整數數組。
Dim countersA (5) As Integer
For intX = 0 To 4
countersA (intX) = 5
Next intX
聲明並放置字元串數組。
Dim countersB (5) As String
For intX = 0 To 4
countersB (intX) = "hello"
Next intX
Dim arrX (2) As Variant 聲明擁有兩個成員的新數組。
arrX (1) = countersA () 將其它數組移居到數組。
arrX (2) = countersB ()
MsgBox arrX (1) (2) 顯示每一個數組的成員。
MsgBox arrX (2) (3)
End Sub
php數組的定義、調用和修改
array() 創建數組,帶有鍵和值。如果在規定數組時省略了鍵,則生成一個整數鍵,這個 key 從 0 開始,然後以 1 進行遞增。
要用 array() 創建一個關聯數組,可使用 => 來分隔鍵和值。
語法
array(key => value)
參數key可選。規定 key,類型是數值或字元串。如果未設定,則生成整數類型的 key。
value必需。規定值。
<h3><font color="#CC6600">輸出aaaaaabbbbbb</font></h3>
<?php
$array = array("key1" => "aaaaaa", 2 => "bbbbbb"); //數組的創建
echo $array["key1"]; //輸出aaaaaa
echo $array[2]; //輸出bbbbbb
?>

遍歷數組

C#提供了foreach語句來遍歷數組的所有元素。
例如:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace shuzhu2 { class Program { static void Main(string[] args) { int[] pins = { 1, 2, 4, 5 ,9,7,13}; foreach (int pin in pins) { Console.WriteLine(pin); }}}運行結果:1      2         4         5         9         7         13

數組類型

多維數組

有時需要追蹤記錄數組中的相關信息。
例如,為了追蹤記錄計算機螢幕上的每一個像素,需要引用它的 X、Y坐標。這時應該用多維數組存儲值。
可用 Visual Basic 聲明多維數組。
例如,下面的語句聲明了一個過程內的 10 × 10 的二維數組。
Static MatrixA (9,9) As Double
可用顯式下界來聲明兩個維數或兩個維數中的任何一個:
Static MatrixA (1 To 10,1 To 10) As Double
可以將所有這些推廣到二維以上的數組。例如:
Dim MultiD (3,1 To 10,1 To 15)
這個聲明建立了三維數組,大小為 4 × 10 × 15。元素總數為三個維數的乘積,為 600。
注意
在增加數組的維數時,數組所占的存儲空間會大幅度增加,所以要慎用多維數組。使用 Variant 數組時更要格外小心,因為他們需要更大的存儲空間。

用循環運算元組

可以用 For循環嵌套有效的處理多維數組。例如,在 MatrixA 中基於每個元素在數組中的位置為其賦值:
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

一維數組

定義
一維數組是最簡單的數組,其邏輯結構是線性表。要使用一維數組,需經過定義、初始化和套用等過程。
數組聲明
在數組的聲明格式里,“數據類型”是聲明數組元素的數據類型,可以是java語言中任意的數據類型,包括簡單類型和結構類型。“數組名”是用來統一這些相同數據類型的名稱,其命名規則和變數的命名規則相同。
數組聲明之後,接下來便是要分配數組所需要的記憶體,這時必須用運算符new,其中“個數”是告訴編譯器,所聲明的數組要存放多少個元素,所以new運算符是通知編譯器根據括弧里的個數,在記憶體中分配一塊空間供該數組使用。利用new運算符為數組元素分配記憶體空間的方式稱為動態分配方式。
舉例:
int[]x; //聲明名稱為x的int型數組
x=new int[10]; //x數組中包含有10個元素,並為這10個元素分配記憶體空間
在聲明數組時,也可以將兩個語句合併成一行,格式如下:
數據類型[]數組名= new 數據類型[個數];
利用這種格式在聲明數組的同時,也分配一塊記憶體供數組使用。如上面的例子可以寫成:
int[]x = new int [10];
等號左邊的int[]x相當於定義了一個特殊的變數x,x的數據類型是一個對int型數組對象的引用,x就是一個數組的引用變數,其引用的數組元素個數不定。等號右邊的new int[10]就是在堆記憶體中創建一個具有10個int型變數的數組對象。int[]x = new int [10];就是將右邊的數組對象賦值給左邊的數組引用變數。

二維數組

定義
前面介紹的數組只有一個下標,稱為一維數組, 其數組元素也稱為單下標變數。在實際問題中有很多量是二維的或多維的, 因此C語言允許構造多維數組。多維數組元素有多個下標, 以標識它在數組中的位置,所以也稱為多下標變數。本小節只介紹二維數組,多維數組可由二維數組類推而得到。二維數組類型說明的一般形式是:
類型說明符數組名[常量表達式1][常量表達式2]…;
其中常量表達式1表示第一維下標的長度,常量表達式2 表示第二維下標的長度。例如:
int a[3][4]; 說明了一個三行四列的數組,數組名為a,其下標變數的類型為整型。該數組的下標變數共有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]
二維數組在概念上是二維的,即是說其下標在兩個方向上變化, 下標變數在數組中的位置也處於一個平面之中, 而不是象一維數組只是一個向量。但是,實際的硬體存儲器卻是連續編址的, 也就是說存儲器單元是按一維線性排列的。如何在一維存儲器中存放二維數組,可有兩種方式:一種是按行排列, 即放完一行之後順次放入第二行。另一種是按列排列, 即放完一列之後再順次放入第二列。在C語言中,二維數組是按行排列的。在如上中,按行順次存放,先存放a[0]行,再存放a[1]行,最後存放a[2]行。每行中有四個元素也是依次存放。由於數組a說明為
int類型,該類型占兩個位元組的記憶體空間,所以每個元素均占有兩個 位元組(圖中每一格為一位元組)。

三維數組

三維數組,是指維數為三的數組結構。三維數組是最常見的多維數組,由於其可以用來描述三維空間中的位置或狀態而被廣泛使用。
三維數組就是維度為三的數組,可以認為它表示對該數組存儲的內容使用了三個獨立參量去描述,但更多的是認為該數組的下標是由三個不同的參量組成的。
數組這一概念主要用在編寫程式當中,和數學中的向量、矩陣等概念有一定的差別,主要表現:在數組內的元素可以是任意的相同數據類型,包括向量和矩陣。
對數組的訪問一般是通過下標進行的。在三維數組中,數組的下標是由三個數字構成的,通過這三個數字組成的下標對數組的內容進行訪問。
元素的表示方法
二維數組的元素也稱為雙下標變數,其表示的形式為:數組名[下標][下標]
其中下標應為整型常量或整型表達式。例如:a[3][4] 表示a數組三行四列的元素。
下標變數和數組說明在形式中有些相似,但這兩者具有完全不同的含義。數組說明的方括弧中給出的是某一維的長度,即可取下標的最大值; 而數組元素中的下標是該元素在數組中的位置標識。前者只能是常量, 後者可以是常量,變數或表達式
一個學習小組有5個人,每個人有三門課的考試成績。求全組分科的平均成績和各科總平均成績。
課程 成績姓名Math C DBASE
張 80 75 92
王 61 65 71
李 59 63 70
趙 85 87 90
周 76 77 85
可設一個二維數組a[5][3]存放五個人三門課的成績。再設一個一維數組v[3]存放所求得各分科平均成績,設變數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);}
程式中首先用了一個雙重循環。在內循環中依次讀入某一門課程的各個學生的成績,並把這些成績累加起來, 退出內循環後再把該累加成績除以5送入v之中,這就是該門課程的平均成績。外循環共循環三次,分別求出三門課各自的平均成績並存放在v數組之中。退出外循環之後,把v[0],v[1],v[2]相加除以3即得到各科總平均成績。最後按題意輸出各個成績。
初始化
二維數組初始化也是在類型說明時給各下標變數賦以初值。二維數組可按行分段賦值,也可按行連續賦值。例如對數組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.按行連續賦值可寫為static int a[5][3]={{80,75,92,61,65,71,59,63,70,85,87,90,76,77,85 }};
這兩種賦初值的結果是完全相同的。
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);}
初始化的額外說明
對於二維數組初始化賦值還有以下說明:
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};
分解
數組是一種構造類型的數據。二維數組可以看作是由一維數組的嵌套而構成的。設一維數組的每個元素都又是一個數組, 就組成了二維數組。當然,前提是各元素類型必須相同。
根據這樣的分析,一個二維數組也可以分解為多個一維數組。C語言允許這種分解有二維數組a[3][4],可分解為三個一維數組,其數組名分別為a[0],a[1],a[2]。對這三個一維數組不需另作說明即可使用。這三個一維數組都有4個元素,例如:一維數組a[0]的元素為a[0][0],a[0][1],a[0][2],a[0][3]。最後必須強調的是,a[0],a[1],a[2]不能當作下標變數使用,它們是數組名,不是一個單純的下標變數。

字元數組

用來存放字元量的數組稱為字元數組。
字元數組類型說明的形式與前面介紹的數值數組相同。例如:char c[10]; 由於字元型和整型通用,也可以定義為int c[10]但這時每個數組元素占2個位元組的記憶體單元。
字元數組也可以是二維或多維數組,例如:char c[5][10];即為二維字元數組。
字元數組也允許在類型說明時作初始化賦值。例如:static char c[10]={`c`,` `,`p`,`r`,o`,g`,r`,`a`,`m`};賦值後各元素的值為:數組C c[0]c[1]c[2]c[3]c[4]c [5]c[6]c[7]c[8]c[9]其中c[9]未賦值,由系統自動賦予0值。
當對全體元素賦初值時也可以省去長度說明。例如:static char c[]={`c`,` `,`p`,`r`,`o`,`g`,`r`,`a`,`m`};這時C數組的長度自動定為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");}}
本例的二維字元數組由於在初始化時全部元素都賦以初值, 因此一維下標的長度可以不加以說明。字元串在C語言中沒有專門的字元串變數, 通常用一個字元數組來存放一個字元串。在2.1.4節介紹字元串常量時,已說明字元串總是以'\0'作為串的結束符。因此當把一個字元串存入一個數組時, 也把結束符'\0'存入數組,並以此作為該字元串是否結束的標誌。有了'\0'標誌後,就不必再用字元數組的長度來判斷字元串的長度了。
C語言允許用字元串的方式對數組作初始化賦值。例如:
static char c[]={'c',' ','p','r','o','g','r','a','m'}; 可寫為:
static char c[]={"C program"}; 或去掉{}寫為:
static char c[]="C program";
用字元串方式賦值比用字元逐個賦值要多占一個位元組, 用於存放字元串結束標誌'\0'。上面的數組c在記憶體中的實際存放情況為:C program'\0'是由C編譯系統自動加上的。由於採用了'\0'標誌,所以在用字元串賦初值時一般無須指定數組的長度, 而由系統自行處理。在採用字元串方式後,字元數組的輸入輸出將變得簡單方便。除了上述用字元串賦初值的辦法外,還可用scanf函式和printf函式一次性輸入輸出一個字元數組中的字元串, 而不必使用循環語句逐個地輸入輸出每個字元。
void main(){static char c[]="BASIC\ndBASE";printf("%s\n",c);} printf("%s\n",c);注意在本例的printf函式中,使用的格式字元串為“%s”, 表示輸出的是一個字元串。而在輸出表列中給出數組名則可。不能寫為:printf("%s",c[]);void main(){char st[15];printf("input string:\n");scanf("%s",st);printf("%s\n",st);} char st[15];
本例中由於定義數組長度為15, 因此輸入的字元串長度必須小於15,以留出一個位元組用於存放字元串結束標誌'\0'。應該說明的是,對一個字元數組,如果不作初始化賦值,則必須說明數組長度。還應該特別注意的是,當用scanf函式輸入字元串時,字元串中不能含有空格,否則將以空格作為串的結束符。例如運行例4.8,當輸入的字元串中含有空格時,運行情況為:input string:this is a book this 從輸出結果可以看出空格以後的字元都未能輸出。為了避免這種情況,可多設幾個字元數組分段存放含空格的串。程式可改寫如下:
Lessonvoid 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);}
本程式分別設了四個數組, 輸入的一行字元的空格分段分別裝入四個數組。然後分別輸出這四個數組中的字元串。在前面介紹過,scanf的各輸入項必須以地址方式出現,如 &a,&b等。但在例4.8中卻是以數組名方式出現的,這是為什麼呢?這是由於在C語言中規定,數組名就代表了該數組的首地址。整個數組是以首地址開頭的一塊連續的記憶體單元。如有字元數組char c[10],在記憶體可表示如圖4.2。設數組c的首地址為2000,也就是說c[0]單元地址為2000。則數組名c就代表這個首地址。因此在c前面不能再加地址運算符&。如寫作scanf("%s",&c);則是錯誤的。在執行函式printf("%s",c) 時,按數組名c找到首地址,然後逐個輸出數組中各個字元直到遇到字元串終止標誌'\0'為止。

表示方法

數組元素是組成數組的基本單元。數組元素也是一種變數, 其標識方法為數組名後跟一個下標。下標表示了元素在數組中的順序號。數組元素的一般形式為:數組名[下標] 其中的下標只能為整型常量或整型表達式。如為小數時,C編譯將自動取整。例如,a[5],a[i+j],a[i++]都是合法的數組元素。數組元素通常也稱為下標變數。必須先定義數組, 才能使用下標變數。在C語言中只能逐個地使用下標變數, 而不能一次引用整個數組。

賦值方法

初始化賦值的一般形式為:static類型說明符數組名[常量表達式]={值,值……值}; 其中static表示是靜態存儲類型, C語言規定只有靜態存儲數組和外部存儲數組才可作初始化賦值(有關靜態存儲,外部存儲的概念在第五章中介紹)。
在{ }中的各數據值即為各元素的初值, 各值之間用逗號間隔。例如:static int a[10]={ 0,1,2,3,4,5,6,7,8,9 }; 相當於a[0]=0;a[1]=1...a[9]=9;

使用規則

1.數組的類型實際上是指數組元素的取值類型。對於同一個數組,其所有元素的數據類型都是相同的。
2.數組名的書寫規則應符合標識符的書寫規定。
3.數組名不能與其它變數名相同。
1.可以只給部分元素賦初值。當{ }中值的個數少於元素個數時,只給前面部分元素賦值。例如:static int a[10]={0,1,2,3,4};表示只給a[0]~a[4]5個元素賦值,而後5個元素自動賦0值。
2.只能給元素逐個賦值,不能給數組整體賦值。例如給十個元素全部賦1值,只能寫為:static int a[10]={1,1,1,1,1,1,1,1,1,1};而不能寫為:static int a[10]=1;(請注意:在C、C#語言中是這樣,但並非在所有涉及數組的地方都這樣,資料庫是從1開始。)
3.如不給可初始化的數組賦初值,則全部元素均為0值。
4.如給全部元素賦值,則在數組說明中, 可以不給出數組元素的個數。例如:static int a[5]={1,2,3,4,5};可寫為:static int a[]={1,2,3,4,5};動態賦值可以在程式執行過程中,對數組作動態賦值。這時可用循環語句配合scanf函式逐個對數組元素賦值。

常用函式

C語言提供了豐富的字元串處理函式, 大致可分為字元串的輸入、輸出、合併、修改、比較、轉換、複製、搜尋幾類。使用這些函式可大大減輕編程的負擔。用於輸入輸出的字元串函式, 在使用前應包含頭檔案"stdio.h" ; 使用其它字元串函式則應包含頭檔案"string.h"。

幾個常用函式

下面介紹幾個最常用的字元串函式:
1.字元串輸出函式puts格式:puts (字元數組名) 功能:把字元數組中的字元串輸出到顯示器。即在螢幕上顯示該字元串
#include"stdio.h"main(){static char c[]="BASIC\ndBASE";puts(c);}static char c[]="BASIC\ndBASE";puts(c);
從程式中可以看出puts函式中可以使用轉義字元, 因此輸出結果成為兩行。puts函式完全可以由printf函式取代。當需要按一定格式輸出時,通常使用printf函式。
2.字元串輸入函式gets格式:gets (字元數組名) 功能:從標準輸入設備鍵盤上輸入一個字元串。本函式得到一個函式值,即為該字元數組的首地址。
#include"stdio.h"main(){char st[15];printf("input string:\n");gets(st);puts(st);}
可以看出當輸入的字元串中含有空格時,輸出仍為全部字元串。說明gets函式並不以空格作為字元串輸入結束的標誌, 而只以回車作為輸入結束。這是與scanf函式不同的。
3.字元串連線函式strcat格式:strcat (字元數組名1,字元數組名2) 功能:把字元數組2中的字元串連線到字元數組1 中字元串的後面,並刪去字元串1後的串標誌“”。本函式返回值是字元數組1的首地址,而且需要字元串處理函式的包含頭檔案 #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);
本程式把初始化賦值的字元數組與動態賦值的字元串連線起來。要注意的是,字元數組1應定義足夠的長度,否則不能全部裝入被連線的字元串。
4.字元串拷貝函式strcpy格式:strcpy (字元數組名1,字元數組名2) 功能:把字元數組2中的字元串拷貝到字元數組1中。串結束標誌“”也一同拷貝。字元數名2, 也可以是一個字元串常量。這時相當於把一個字元串賦予一個字元數組。
#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);
本函式要求字元數組1應有足夠的長度,否則不能全部裝入所拷貝的字元串。
5.字元串比較函式strcmp格式:strcmp(字元數組名1,字元數組名2) 功能:按照ASCII碼順序比較兩個數組中的字元串,並由函式返回值返回比較結果。
字元串1=字元串2,返回值=0;
字元串1〉字元串2,返回值〉0;
字元串1〈字元串2,返回值〈0。
本函式也可用於比較兩個字元串常量,或比較數組和字元串常量。
#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<st2\n");
}
{ 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<st2\n");
}
本程式中把輸入的字元串和數組st2中的串比較,比較結果返回到k中,根據k值再輸出結果提示串。當輸入為dbase時,由ASCII 碼可知“dBASE”大於“C Language”故k〉0,輸出結果“st1>st2”。
6.測字元串長度函式strlen格式:strlen(字元數組名) 功能:測字元串的實際長度(不含字元串結束標誌‘’) 並作為函式返回值。

PHP 5 Array 函式

函式 描述
array() 創建數組。
array_change_key_case() 返回其鍵均為大寫或小寫的數組。
array_chunk() 把一個數組分割為新的數組塊。
array_column() 返回輸入數組中某個單一列的值。
array_combine() 通過合併兩個數組(一個為鍵名數組,一個為鍵值數組)來創建一個新數組。
array_count_values() 用於統計數組中所有值出現的次數。
array_diff() 比較數組,返回兩個數組的差集(只比較鍵值)。
array_diff_assoc() 比較數組,返回兩個數組的差集(比較鍵名和鍵值)。
array_diff_key() 比較數組,返回兩個數組的差集(只比較鍵名)。
array_diff_uassoc() 比較數組,返回兩個數組的差集(比較鍵名和鍵值,使用用戶自定義的鍵名 比較函式)。
array_diff_ukey() 比較數組,返回兩個數組的差集(只比較鍵名,使用用戶自定義的鍵名比較 函式)。
array_fill() 用給定的鍵值填充數組。
array_fill_keys() 用給定的指定鍵名的鍵值填充數組。
array_filter() 用回調函式過濾數組中的元素。
array_flip() 反轉/交換數組中的鍵名和對應關聯的鍵值。
array_intersect() 比較數組,返回兩個數組的交集(只比較鍵值)。
array_intersect_assoc() 比較數組,返回兩個數組的交集(比較鍵名和鍵值)。
array_intersect_key() 比較數組,返回兩個數組的交集(只比較鍵名)。
array_intersect_uassoc() 比較數組,返回兩個數組的交集(比較鍵名和鍵值,使用用戶自定義的鍵名 比較函式)。
array_intersect_ukey() 比較數組,返回兩個數組的交集(只比較鍵名,使用用戶自定義的鍵名比較 函式)。
array_key_exists() 檢查指定的鍵名是否存在於數組中。
array_keys() 返回數組中所有的鍵名。
array_map() 將用戶自定義函式作用到給定數組的每個值上,返回新的值。
array_merge() 把一個或多個數組合併為一個數組。
array_merge_recursive() 遞歸地把一個或多個數組合併為一個數組。

JAVA Eclipse 的Array函式

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("排序前的數組為:"); System.out.println(Arrays.toString(a));//調用Arrays.toString將數組a的值 //轉換為字元串並 顯示出來 //調用Array.sort方法,對數組進行排序 Arrays.sort(a); System.out .println("排序後的數組為:"); //System.out.println(a+" ");若為此種寫法,輸出結果將出現亂碼 System.out.println(Arrays.toString(a));//調用Arrays.toString將數組a //的值轉換為字元串並 顯示出來

相關詞條

熱門詞條

聯絡我們