在超市中每件商品都有它們自己的**,這些**可以相等也可以不相等,這些乙個個**就是乙個個單獨的資料,但是有一天超市的老闆要對一些**進行調整或者是要看到超市裡面的所有或一部分商品的**,那這是必定要統計和收集,進而放進乙個**中提供給老闆,而在c++中也有與現實中類似的「**」,也就是這篇文章所要介紹的 一維陣列。
當然也有二維、三位…多維陣列,在本章現講一維,二維和三維會發布在我的部落格中
在c++中對陣列的描述是:陣列是一組在記憶體中依次連續存放的、具有統一型別的資料變數所組成的集合體。
其中在陣列中的每乙個變數都叫做陣列元素,並且都是同一種資料型別。
/*************
陣列的定義格式:
資料型別 陣列名[常量表示式]
;
具體例子如下:
//定義乙個儲存十個資料的陣列
int a[10]
;
例子分析:在這裡定義了乙個儲存int型別資料的整型陣列,陣列名是a,而且陣列命名遵循c++的命名規則,是用來標識命名的是陣列,裡面的常量表示式的值就是該陣列的長度為10,即能存下是個整型資料。
需要注意的是:
陣列元素的型別可以是除了void型以外的任何一種型別,也可以是使用者已經定義的構造資料型別;
陣列名是有使用者定義,而且陣列名可用來代表陣列元素的起始位址,且是乙個位址常量;
陣列定義時,中的常量表示式的值必須是unsigned int 型別的正整數,而且必須是常量,否則會報錯,定義常量用關鍵字const(如:const int a=10;定義了常量a);常量表示式的值表示陣列的大小或者說是長度,也就是能存的陣列元素的數量;
而且陣列的定義除了與普通型別(如:int double 等型別)不同外,其他都類似,如例子:
#include
using
namespace std;
intmain()
例子分析:在定義兩個陣列a[10],b[3],就像定義兩個int型別的c,d變數一樣,可以連續定義。也可以兩個同型別(如:同int型別)的,也可以同時定義。
/****/
有時候在一些程式中可能會需要查詢乙個陣列的大小,這樣才能防止資料過多地存放進去,所以有一套計算陣列大小的公式:
#include
using
namespace std;
intmain()
例子分析:const定義常量,sizeof()函式是得到該資料所佔記憶體大小,sizeof(a)先得到整個陣列所佔記憶體的大小,因為陣列a是由十個int型別的元素組成,所以該陣列佔的記憶體的大小就是(元素總數)*(元素型別所佔的記憶體大小);sizeof(a[0]) 其中a[0]就表示從a陣列中取出第乙個元素,0是第乙個元素的索引值,第二個的索引值是1,之後的元素就以此類推,取出第乙個值後就相當於把這個值放在sizeof()的小括號中,然後識別出該值的型別,然後sizeof()函式就返回該型別在記憶體中佔的記憶體大小,因為是int型別,int型別佔的記憶體大小為4(當然在其他一些編譯器或者系統裡面可能不一樣)所以sizeof(a[0])返回的值是乙個元素所佔的記憶體大小,又因為陣列裡面的元素的型別都是一樣的,所以(元素個數)=(整個陣列佔的記憶體大小)/(乙個元素佔的記憶體),(補充一下:以為每個元素的型別都是一樣的,所以sizeof()的小括號中可以是a[1]、a[2]、…),由(陣列所佔記憶體的大小)=(陣列個數)乘以(每個元素所佔的記憶體大小),所以還可以這樣計算乙個陣列所佔的記憶體大小:n乘以(每個元素所佔記憶體大小)。
/陣列的初始化:
用初值表進行初始化:
int a[5]
=;
就是初值表,各個初值用逗號隔開,初值可以是乙個變數表示式,而且初值n不能超過陣列的大小;如果初值的個數小於陣列可以存下的元素數量,則餘下部分用零補上(其他型別也一樣,如char型別也一樣,但是0在字元中表示空,具體可以查ascii碼表)
在初始化的時候裡面也可以什麼也不填,在用初值表初始化的時候,初值表裡面的初值個數就是陣列所能存下的元素個數。而在函式中定義陣列時,如果沒有給出初值表時,陣列元素的值為隨機值;當在函式外定義陣列時,如果沒有初始化,其陣列元素的值為0。初始表可以逗號結尾,這和沒有逗號結尾的效果一樣。
/一維陣列中元素的訪問:
一維陣列訪問操作有兩種:一是訪問陣列元素;二是讀取陣列元素的位址;
一、陣列元素的讀取是通過陣列名和下標(索引值)來獲取元素:
#include
using
namespace std;
intmain()
; cout << a[3]
<< endl;
}
輸出:
二、陣列的元素通過陣列名來讀取,格式:陣列名+整型表示式
由於其位址不是實際的位址值,稱這個位址表示式為符號位址表示式。例如一維陣列元素a[4]的符號位址表示式為a+4。
a是乙個int型陣列,陣列的符號位址表示式a+n所表達的位址是第n+1個元素a[n]的位址,代表的實際位址為:a+nsizeof(int)* 而不是a+n。
在使用陣列的時候應注意:
(1),使用陣列的時候最容易犯的錯誤就是陣列元素越界,包括上標越界和下標越界。上標越界是指數組元素的訪問位址超過了陣列的起始位址;下標越界指的是陣列元素的訪問位址越過了陣列中最後乙個陣列元素的位址。對於這種錯誤,編譯器可能無法得知,往往在執行時出錯,因此必須小心。
(2),陣列名是乙個位址常量,不能當做左值(即賦值的目標),因此不可以將乙個陣列賦值給另乙個陣列。
如:
int c[3]
, d[3]
; c = d;
//錯誤
正確的方法應該是將對應的元素進行複製。
如:
for
(int i =
0; i <
3; i++
)
還可以用memcpy()函式進行記憶體位元組複製,其使用格式如下:
memcpy
(目標位址, 源位址, 位元組數n)
;
memcpy
(c, d,
sizeof
(d))
;
但是使用memcpy時要包含檔案頭 cstring 。
在使用memcpy()函式時就體現了,把陣列位址傳遞時,陣列名就是陣列的起始位址。
在陣列中每個元素的位址是連續的,用&識別符號取得位址。
如:
int a[3]
=;cout <<
<<
&a[0
]<< endl;
cout <<
<<
&a[1
]<< endl;
cout <<
<<
&a[2
]<< endl;
c的一維陣列
include define size 10 int main4 int i for i 0 i 5 i return 0 int main3 printf n return 0 int main2 內部陣列名不能和其他變數,其他陣列名同名 int a 10 err 2,定義陣列是,最好是常量 in...
C 一維陣列
main.m c4 一維陣列 created by 何恩營 on 14 10 17.import int main int argc,const char argv int array 5 定義了乙個int型別,元素個數為5,陣列名位array的陣列 陣列下標 索引 的取值範圍是0 元素個數 1 p...
C 的一維陣列和二維陣列
陣列 array 是一種資料格式,能夠儲存多個同型別的值。一維陣列 int a 3 char a 10 this is a 共有9個字元,包含空字元,a 9 將被系統自動賦值為 0 定義字元陣列,需要考慮到為最後的乙個結束符 0 預留出乙個位置,char陣列還可以這樣賦值 char a 10 上面兩...