一些具有相同数据类型或相同属性(类)的数据的集合,用数据名标识,用下标或序号区分各个数据。数组中的数据称为元素。
一维数组
定义一维数组的形式: 数据类型 数据名[常量表达式]
初始化的形式: 数据类型 数组名[常量表达式] = {初值表};
为数组的某一个元素赋值: 数组名[下标] =值(下标从0开始)
数组的引用: 数组名[下标]
初始化数组时,可以只给部分数组元素赋值
对全部元素数组赋值时,可以不指定数组长度,编译系统会根据初值个数确定数组的长度。
static型数组元素不赋初值,系统会自动默认为0。
int arr1[4] = {1,2,3,4}; int arr2[4] = { 1,2 }; int arr[4] = {0];//所有元素为0 static int arr3[3]; int arr4[4]; cout << "arr1:"<<arr1[0] << arr1[1] << arr1[2] << arr1[3] << endl; cout << "arr2:" << arr2[0] << arr2[1] << arr2[2] << arr2[3] << endl; cout << "arr3:" << arr3[0] << arr3[1] << arr3[2] << arr3[3] << endl; cout << "arr4:" << arr4[0] << arr4[1] << arr4[2] << arr4[3] << endl;
二维数组
定义一维数组的形式: 数据类型 数据名[常量表达式1][常量表达式2]
初始化的形式: 数据类型 数组名[常量表达式1] [常量表达式2]= {初值表};
为数组的某一个元素赋值: 数组名[行下标][列下标] =值(下标从0开始)
数组的引用: 数组名[行下标][列下标]
将所有数据写在一个花括号内,自动按照数组元素个数在内存中排列的顺序赋值
可对部分元素赋值,其余元素的值自动取0.
定义初始化数组时,可以省略第一维的长度,第二维不能省,系统会自动确认行数
int arr1[2][3]; int arr[2][3] = {0];//所有元素为0 int arr2[2][3] = { {1,2,3},{4,5,6} }; int arr3[2][3] = { 1,2,3 ,4,5,6 }; int arr4[2][3] = { {1},{4,6} }; int arr5[][3] = { 1,2,3 ,4,5,6 };
字符数组
char类型的数组,在字符数组中最后一位为’\0’)时,可以看成时字符串。在C++中定义了string类,在Visual C++中定义了Cstring类。
字符串中每一个字符占用一个字节,再加上最后一个空字符。如:
//字符串长度为8个字节,最后一位是'\0'。 char array[10] = "yuanrui";//yuanrui\0\0\0 //也可以不用定义字符串长度,如: char arr[] = "yuanrui";//yuanrui\0
指向数组的指针
指针的概念会在后面详细讲解。
double *p; double arr[10]; p = arr;//p = &arr[0]; *(p+3);//arr[3]
数组与new(动态创建数组)
一维数组:
int* arr1 = new int[2];//delete []arr1; int* arr2 = new int[3]{ 1,2 };//delete []arr2
二维数组:
int m=2, n=3; int** arr3 = new int*[2];//delete []arr3 for (int i = 0; i < 10; ++i) { arr3[i] = new int[3]; // delete []arr3[i] } int* arr4 = new int[m*n];//数据按行存储 delete []arr3
获取数组的大小
- 动态创建(new)的基本数据类型数组无法取得数组大小
int a[3]; //第一种方法 cout<<sizeof(a)/sizeof(a[0])<<endl; //第二种方法 cout << end(a) - begin(a) << endl; //二维数组 int arr[5][3]; int lines = sizeof(arr) / sizeof(arr[0][0]); int row = sizeof(arr) / sizeof(arr[0]);//行 int col = lines / row;//列 cout << row << "::"<<col << endl; cout << end(arr) - begin(arr) << endl;//5行