[C++]陣列
陣列
一維陣列的定義和引用
陣列是同一型別的一組值(10個 char 或15個 int) ,在記憶體中順序存放。
整個陣列共用一個名字,而其中的每一項又稱為一個元素。
一、定義方式:
其元素分別為:a[0], a[1], a[2], a[3]
其序號從0開始。若存放首地址為2000H,則在記憶體中為:
C++不允許對陣列的大小作動態的定義,即陣列的大小不能是變數,必須是常量。
如果要根據不同的數值改變陣列的大小,可用常量表示式。如:
#define SIZE 50
void main(void)
{ int art[SIZE];
......
}
二、一維陣列元素的引用
陣列必須先定義,具體引用時(賦值、運算、輸出)其元素等同於變數。
三、一維陣列的初始化
在定義陣列的同時給陣列元素賦值。
注意:
1、對陣列中的一部分元素列舉初值,未賦值的部分是0。
int a[10]= {0,1, 2, 3, 4, 5};
int a[10]= {0,1, 2, 3, 4, 5, 0, 0, 0, 0};
2、不能給陣列整體賦值,只能一個一個地賦值。
int a[10]= {0,1,2,.....,9};
int a[10]= {0,1, 2, 3, 4, 5,6,7,8,9};
3、可以用 int a[ ]= {0,1, 2, 3, 4, 5, 6, 7, 8, 9}; 給陣列賦值,編譯器會自動計算出內的元素項數,並將陣列定義為該長度。
4、用區域性static 或全域性定義的陣列不賦初值,系統均預設其為‘\0’。
static int a[10];(即儲存在靜態資料區中的陣列其元素預設為0)
陣列在記憶體中順序存放,第一個元素位於地址的最低端。
二維陣列的定義和引用
一、定義方式:
型別說明符 陣列名[常量表示式][常量表示式];
其元素分別為: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]
其行列的序號均從0開始。若存放首地址為2000H,則在記憶體中為:
即在記憶體中,多維陣列依然是直線順序排列的,第一個元素位於最低地址處。
二、二維陣列的引用
與一維陣列一樣,二維陣列必須先定義,其維數必須是常量。具體引用時(賦值、運算、輸出)其元素等同於變數。
三、二維陣列的初始化
在定義陣列的同時給陣列元素賦值。即在編譯階段給陣列所在的記憶體賦值。
1、分行賦值
int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
2、順序賦值
int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12}; //依次賦值
3、部分賦值
int a[3][4]={{1},{5},{9}};
/* a[0][0]=1, a[1][0]=5, a[2][0]=9 其餘元素為0 */
4、分行或全部賦值時,可以省略第一維,第二維不可省。
int a[ ][4]={{1,2},{5,6,7,8,}{9,10,11,12}};
5、不能給陣列整體賦值,只能一個一個地賦值。
int a[2][3]={1,2,3,.....,12};
6、用static 定義的陣列不賦初值,系統均預設其為‘\0’。
static int a[2][3];
陣列作為函式引數
一、陣列元素作函式引數
陣列元素作函式實參,用法與一般變數作實參相同,是“值傳遞”。
二、用陣列名作函式引數
在C++中,陣列名被認為是陣列在記憶體中存放的首地址。
用陣列名作函式引數,實參與形參都應用陣列名。這時,函式傳遞的是陣列在記憶體中的地址。
實參中的陣列地址傳到形參中,實參形參共用同一段記憶體。
注意:
1、用陣列名作函式引數,應在主調函式和被調函式中分別定義陣列,且型別一致。
2、需指定實引數組大小,形引數組的大小可不指定。陣列名作實參實際上是傳遞陣列的首地址。
3、C++語言規定,陣列名代表陣列在記憶體中儲存的首地址,這樣,陣列名作函式實參,實際上傳遞的是陣列在記憶體中的首地址。實參和形參共佔一段記憶體單元,形引數組中的值發生變化,也相當於實引數組中的值發生變化。
用多維陣列名作函式引數
同樣,實參向形參傳遞的是陣列的首地址。
如果實參、形參是二維陣列,則形參可以省略第一維,不可省略第二維,且第二維必須與實參中的維數相等。
字元陣列
用來存放字元資料的陣列是字元陣列,字元陣列中的一個元素存放一個字元。
一、字元陣列的定義
二、字元陣列的初始化
與數值陣列的初始化相同,取其相應字元的ASCII值。
char c[10]={‘I’, ‘ ’, ‘a’, ‘m’, ‘ ’, ‘a’, ‘ ’ , ‘b’, ‘o’, ‘y’};
char st1[ ]={65, 66, 68};
如果字元個數大於陣列長度,做錯誤處理;如果數值個數小於陣列長度,後面的位元組全部為‘\0’。
如果省略陣列長度,則字元數即為陣列長度。
static char c[ ]={‘I’, ‘ ’, ‘a’, ‘m’, ‘ ’, ‘a’, ‘ ’ , ‘g’, ‘i’, ‘r’,’l’};
同理,也可定義和初始化一個二維或多維的字元陣列。分層或省略最後一維。
三、字元陣列的引用
void main(void)
{ char c[10]={‘I’, ‘ ’, ‘a’, ‘m’, ‘ ’, ‘a’, ‘ ’ , ‘b’, ‘o’, ‘y’};
int i;
for (i=0; i<10; i++)
cout<<c[i];
cout<<“\n”;
}
四、字串和字串結束標誌
C++語言將字串作為字元陣列來處理。
字串常量:“CHINA”,在機內被處理成一個無名的字元型一維陣列。
C++語言中約定用‘\0’作為字串的結束標誌,它佔記憶體空間,但不計入串長度。有了結束標誌‘\0’後,程式往往依據它判斷字串是否結束,而不是根據定義時設定的長度。
字串與字元陣列的區別:
字元陣列:
char a[ ]={‘C’,’H’,’I’,’N’,’A’};
字串:
char c[ ]=“CHINA”;
可以用字串的形式為字元陣列賦初值
char c[ ]={“I am a boy”}; /*長度11位元組,以‘\0’結尾
char a[ ]={‘I’, ‘ ’, ‘a’, ‘m’, ‘ ’, ‘a’, ‘ ’ , ‘b’, ‘o’, ‘y’};
/* 長度10位元組 */
如果陣列定義的長度大於字串的長度,後面均為‘\0’。
char c[10]=“CHINA”;
‘\0’的ASCII為0,而‘ ’(空格)的ASCII為32。
字元陣列的輸入輸出
逐個字元的輸入輸出。這種輸入輸出的方法,通常是使用迴圈語句來實現的。如:
char str[10];
cout<<“輸入十個字元:”;
for(int i=0;i<10;i++)
cin>>str[i];//A
......
A行將輸入的十個字元依次送給陣列str中的各個元素。
·把字元陣列作為字串輸入輸出。對於一維字元陣列的輸入,在cin中僅給出陣列名;輸
出時,在cout中也只給出陣列名。
·當要把輸入的一行作為一個字串送到字元陣列中時,則要使用函式cin.getline( )。這個
函式的第一個引數為字元陣列名,第二個引數為允許輸入的最大字元個數。
六、字串處理函式
C++中沒有對字串變數進行賦值、合併、比較的運算子,但提供了許多字串處理函式,使用者可以呼叫 #include “string.h”
所有字串處理函式的實參都是字元陣列名
1、合併兩個字串的函式 strcat (str1, str2)
將第二個字串 str2 接到第一個字串 str1 後。
注意:第一個字串要有足夠的空間。
2、複製兩個字串的函式 strcpy (str1, str2)
static char str1[20]={“I am a ”};
static char str2[ ]={“boy”};
strcpy (str1, str2);
3、比較兩個字串的函式 strcmp (str1, str2)
此函式用來比較str1和str2中字串的內容。函式對字串中的ASCII字元逐個兩兩比較,直到遇到不同字元或‘\0’為止。函式值由兩個對應字元相減而得。
該函式具有返回值,返回值是兩字串對應的第一個不同的ASCII碼的差值。
若兩個字串完全相同,函式值為0。
4、求字串長度的函式 strlen (str1)
函式引數為陣列名,返回值為陣列首字母到‘\0’的長度。並非陣列在記憶體中空間的大小。
5、 strlwr (str1)
將str1中的大寫字母轉換成小寫字母。
6、 strupr (str1)
將str1中的小寫字母轉換成大寫字母。
7、函式strncmp(字串1,字串2 , maxlen)
函式原型為:
int strncmp(char str1[ ], char str2[ ],int m)
第三個引數為正整數,它限定了至多比較的字元個數
若字串1或字串2的長度小於maxlen的值時,函式的功能與strcmp( )相同。
當二個字串的長度均大於maxlen的值時,maxlen為至多要比較的字元個數。
cout<<strncmp(“China”,“Chifjsl;kf”,3)<<‘\n’;
8、函式strncpy(字元陣列名1, 字串2, maxlen)
函式原型為:
void strncmp(char str1[ ], char str2[ ],int m)
第三個引數為正整數,它限定了至多拷貝的字元個數
若字串2的長度小於maxlen的值時,函式的功能與strcpy( )相同。
當字串2的長度大於maxlen的值時,maxlen為至多要拷貝的字元個數。
除錯程式的方法:
1)單步除錯:以行為單位,每執行一步,程式就會中斷,可以實時查詢目前各變數的狀態及程式的走向。可以選擇是否進入子函式。
2)執行到游標處,可以直接使程式執行到游標處再進行單步除錯,這種方法可以不必執行正確的迴圈而直接到有疑問的地方。
相關文章
- C++陣列 字串C++陣列字串
- C++陣列長度C++陣列
- c++陣列排序插入C++陣列排序
- c++中的陣列C++陣列
- C/C++ 二維陣列的理解(多維陣列)C++陣列
- C++ 指標陣列與陣列指標的區別C++指標陣列
- C++陣列的儲存|C++陣列所佔記憶體空間C++陣列記憶體
- C++ ——vector陣列筆記C++陣列筆記
- C/C++ 讀入一個整型陣列,陣列大小未知C++陣列
- C++ 獲取陣列大小、多維陣列操作詳解C++陣列
- c++筆記_多維陣列C++筆記陣列
- C和C++陣列的用法C++陣列
- C++陣列的連續性C++陣列
- C++ 陣列的 auto 和 decltypeC++陣列
- C++獲取陣列的長度C++陣列
- C++陣列預設初值問題C++陣列
- C++ 使用 new 建立二維陣列C++陣列
- C++ 煉氣期之陣列探幽C++陣列
- [ASM C/C++] C語言陣列ASMC++C語言陣列
- C和C++中所謂的陣列C++陣列
- C++ 陣列宣告和初始化C++陣列
- c++ -- 二維陣列引數傳遞C++陣列
- 【C++】構造資料型別--陣列C++資料型別陣列
- c++遍歷陣列的多種方式C++陣列
- C++動態建立二維陣列,二維陣列指標,以及動態二維陣列函式傳遞C++陣列指標函式
- 面試最常問的陣列轉樹,樹轉陣列 c++ web框架paozhu實現面試陣列C++Web框架
- C++語言中陣列指標和指標陣列徹底分析(系列一) (轉)C++陣列指標
- C++ 練氣期之二維陣列與矩陣運算C++陣列矩陣
- C/C++獲取二維陣列行列數C++陣列
- C++用new建立二維陣列的方法C++陣列
- [C++之旅] 14 物件成員與物件陣列C++物件陣列
- C++陣列在年曆列印中的運用C++陣列
- 獲取C/C++字串、字元陣列長度C++字串字元陣列
- C++基礎回顧4——動態陣列C++陣列
- Java、C、C++中的陣列的比較JavaC++陣列
- 在C++中實現變長陣列 (轉)C++陣列
- C++ Break、Continue 和 陣列操作詳解C++陣列
- (C語言)簡單明瞭的 陣列模擬棧+ (C++)陣列模擬棧C語言陣列C++