一、數(shù)組
數(shù)組存放的對象都是同一類型;數(shù)組一旦定義,大小就固定不變了。
1、定義、初始化數(shù)組
定義: 基本數(shù)據(jù)類型 聲明符[size];
定義數(shù)組時,必須指定數(shù)組的類型,不允許使用auto關(guān)鍵字來進行類型推斷。數(shù)組的元素必須是對象,不能是引用 。-
復雜的數(shù)組聲明: 數(shù)組可以存放對象,當然可以存放指針,也就是可以定義 指針數(shù)組 ;又因為數(shù)組本身也是對象,因此可以定義 數(shù)組的指針 以及 數(shù)組的引用 。
int arr[10]; int *ptrs[10]; //ptrs是含有10個整型指針的數(shù)組 int &refs[10] = /* ? */; //錯誤:不存在引用的數(shù)組,數(shù)組元素不能是引用 int (*parray)[10] = &arr; //parray是一個指針,指向一個含有10個整數(shù)的數(shù)組 int (&rarray)[10] = arr; //rarray是一個引用,綁定在一個含有10個整數(shù)的數(shù)組上 int *(&array)[10] = ptrs; //array是一個引用,綁定在一個含有10個整型指針的數(shù)組上 -
初始化:
const unsigned sz = 3; int a1[sz] = {0,1,2}; //含有3個元素的數(shù)組 int a2[] = {0, 1, 2}; //維度是3的數(shù)組 int a3[5] = {0,1,2}; //維度是5的數(shù)組,等價于a3[] = {0,1,2,0,0}; int a4[2] = {0,1,2}; //錯誤:維度小于初始值個數(shù) // **數(shù)組不允許拷貝和賦值** int a5[] = a1; //錯誤:不允許使用一個數(shù)組初始化另一個數(shù)組 a2 = a1; //錯誤:不能把一個數(shù)組直接賦值給另一個數(shù)組
2、訪問數(shù)組元素
數(shù)組的索引從0開始。使用數(shù)組下標時,通常將其定義為size_t類型。
size_t類型是一種 機器相關(guān)的無符號類型 。它被設(shè)計的足夠大以便能表示內(nèi)存中任意對象的大小。C++在 cstddef 頭文件中定義了size_t類型,這個頭文件對應的C語言版本是C標準庫 stddef.h 頭文件。
3、指針和數(shù)組
C/C++中,編譯器會把數(shù)組轉(zhuǎn)換成指針。在用到數(shù)組名字的地方,編譯器會自動 將數(shù)組名替換為一個指向數(shù)組首元素的指針。對數(shù)組使用下標運算符時,編譯器會自動轉(zhuǎn)換為對指向數(shù)組元素的指針進行下標運算:
int nums[] = {1,2,3};
int *p = nums; //等價于 int *p = &nums[0];
int i = nums[2];
i = *(p + 2); // 等價于 i = nums[2];
p = &nums[1]; //p指向nums第二個元素
int j = p[1]; //等價于 *(p+1),即nums 第三個元素
int k = p[-1]; //等價于 *(p-1), 即nums 第一個元素
二、字符串
1、C風格字符串
C風格字符串不是一種類型,而是C中為了表達和使用字符串而形成的一種約定俗成的寫法 —— 字符串存放在字符數(shù)組中并以空字符'\0'結(jié)束 。一般利用指針來操作這些字符串。
C++提供了 cstring 頭文件,對應C語言頭文件 string.h 。其中定義了一組操作C風格字符串的函數(shù),如返回字符串長度、比較字符串、連接字符串等。注意: 這些函數(shù)接收的參數(shù)都是 指針 (指向存放C風格字符串的字符數(shù)組)。
2、標準庫類型string
標準庫類型string表示可變長的字符序列。使用 string 類型必須先包含 string 頭文件,string 定義在命名空間 std 中。
建議: 使用標準庫string類型,而不是C風格字符串。
2.1 初始化 string 對象的方式
string s1; //默認初始化,s1是一個空字符串
string s2(s1); //s2是s1的副本(即s1中所有字符都拷貝到s2中)
string s3 = s1; //等價于 s3(s1)
string s4 = "value"; //s4是字符串字面值"value"的副本,但不包含最后的空字符
string s5("value"); //等價于 s5 = "value";
string s6(n, 'c'); //s6初始化為n個連續(xù)字符'c'組成的字符串
2.2 string::size_type類型
string類型定義了一系列函數(shù)來操作 string 對象。
size() 函數(shù)返回 string 對象的長度。實際上,返回值本身是一個string::size_type類型的值。
大多數(shù)標準庫類型都定義了幾種配套的類型,這些配套類型體現(xiàn)了標準庫類型和機器無關(guān)的特性。類型 size_type 就是在類 string 中定義的:它是一個無符號類型,且足以存放任意 string 對象的大小。所有用于存放 string 類的 size() 函數(shù)返回值的變量,都應該是 string::size_type 類型的。
2.3 string 類型中的下標運算符 [ ]
string 類型重載了下標運算符[ ],接收的輸入?yún)?shù)是 string::size_type 類型的值,返回值是該參數(shù)位置上字符的 引用 。
無論何時用到字符串的下標,都要注意檢查其合法性。