山西万荣全家乱,天天饮食糖醋鱼,微型交流减速电机
数组是有序的元素序列,是用于储存多个相同类型数据的集合。
typename arrayname[arraysize];
typename* arrayname = new typename[arraysize];
数组名
将有包含有限个类型相同的变量的集合命名,那么这个集合的名称为数组名。
元素
组成数组的各个变量称为数组的元素。
下标
数组的元素从第一个编号为0,依次往后按自然数序列排序。数组的各个元素的数字编号称为下标。
长度
数组所包含的所有元素的数量称为数组的长度。
大小
元素的大小 * 数组的长度 = 数组的大小
前驱
在长度为n的数组中
对于任何0 ≤ i < j < n
,a[i]
都是a[j]
的前驱(predecessor)。
特别地,对于任何1 ≤ i
,a[i - 1]
称作a[i]
的直接前驱(intermediate predecessor)。
后继
在长度为n的数组中
对于任何0 ≤ i < j < n
,a[j]
都是a[i]
的后继(successor)。
特别地,对于任何i ≤ (n-2)
,a[i + 1]
称作a[i]
的直接后继(intermediate successor)。
前缀
任一元素的所有前驱构成其前缀(prefix)。
后缀
任一元素的所有后继构成其后缀(suffix)。
物理地址
对于一维数组a[n]
,每个元素占用s
个单位的空间,则元素a[i]
对应的物理地址为:a + i * s
。
静态数组
int s_1darray[2];
动态数组
int* d_1darray = new int[2];
静态数组
int s_2darray[2][3];
动态数组
int** d_2darray = new int*[2]; for(int i = 0; i < 2; i++) d_2darray[i] = new int[3];
静态数组
int s_3darray[2][3][4];
动态数组
int*** d_3darray = new int**[2]; for(int i = 0; i < 2; i++) { d_3darray[i] = new int*[3]; for(int j = 0; j < 3; j++) d_3darray[i][j] = new int[4]; }
静态数组
[]
的值必须在编译时是已知的,即不能为变量。
动态数组
[]
的值可以是变量。
特别的
[]
中的值可以为0。
静态数组
int s_1darray_inited[2] = {1,2};
动态数组
int* d_1darray_inited = new int[2]();
静态数组
int s_2darray_inited[2][3] = {{1,2,3},{4,5,6}};
动态数组
int** d_2darray_inited = new int*[2]; for(int i = 0; i < 2; i++) d_2darray_inited[i] = new int[3]();
静态数组
int s_3darray_inited[2][3][4] = {{{1,2,3,4},{5,6,7,8},{9,10,11,12}}, {{12,11,10,9},{8,7,6,5},{4,3,2,1}}};
动态数组
int*** d_3darray_inited = new int**[2]; for(int i = 0; i < 2; i++) { d_3darray_inited[i] = new int*[3]; for(int j = 0; j < 3; j++) d_3darray_inited[i][j] = new int[4](); }
静态数组
如果不主动初始化那么基本类型数组中的数据则是“脏数据”,但是全局变量和静态变量系统会将元素初始化为指定类型的默认值。特别的类类型会调用默认的构造函数,并且基本类型数组若初始化列表为空则系统会将元素初始化为元素的默认值。
当在初始化的序列中,如果序列中的值的数目小于数组的长度,那么剩余的元素会自动初始化为默认值。
动态数组
如果不主动初始化那么数组中的数据则是“脏数据”。
动态数组
delete[] s_1darray;
动态数组
for(int i = 0; i < 2; i++) delete[] d_2darray[i];
动态数组
for(int i = 0; i < 2; i++) { for(int j = 0; j < 3; j++) delete[] d_3darray[i][j]; }
静态数组
静态数组分配在内存的栈里,在函数执行完以后,静态数组会出栈销毁。这是由系统自动完成的。
动态数组
动态分配的内存在堆上,系统无法自动释放堆上的内存,需要主动释放。
#include<iostream> using namespace std; int main() { int s_1darray[2]; int* d_1darray = new int[2]; int s_2darray[2][3]; int** d_2darray = new int*[2]; for(int i = 0; i < 2; i++) d_2darray[i] = new int[3]; int* s_3darray[2][3][4]; int*** d_3darray = new int**[2]; for(int i = 0; i < 2; i++) { d_3darray[i] = new int*[3]; for(int j = 0; j < 3; j++) d_3darray[i][j] = new int[4]; } delete[] s_1darray; for(int i = 0; i < 2; i++) delete[] d_2darray[i]; for(int i = 0; i < 2; i++) { for(int j = 0; j < 3; j++) delete[] d_3darray[i][j]; } int s_1darray_inited[2] = {1,2}; int* d_1darray_inited = new int[2](); int s_2darray_inited[2][3] = {{1,2,3},{4,5,6}}; int** d_2darray_inited = new int*[2]; for(int i = 0; i < 2; i++) d_2darray_inited[i] = new int[3](); int s_3darray_inited[2][3][4] = {{{1,2,3,4},{5,6,7,8},{9,10,11,12}}, {{12,11,10,9},{8,7,6,5},{4,3,2,1}}}; int*** d_3darray_inited = new int**[2]; for(int i = 0; i < 2; i++) { d_3darray_inited[i] = new int*[3]; for(int j = 0; j < 3; j++) d_3darray_inited[i][j] = new int[4](); } for(int i = 0; i < 2; i++) cout << s_1darray_inited[i] << " "; cout << endl << endl; for(int i = 0; i < 2; i++) { for(int j = 0; j < 3; j++) cout << s_2darray_inited[i][j] << " "; cout << endl; } cout << endl; for(int i = 0; i < 2; i++) { for(int j = 0; j < 3; j++) { for(int k = 0; k < 4; k++) cout << s_3darray_inited[i][j][k] << " "; cout << endl; } } return 0; } /* 运行结果为: 1 2 1 2 3 4 5 6 1 2 3 4 5 6 7 8 9 10 11 12 12 11 10 9 8 7 6 5 4 3 2 1 -------------------------------- process exited after 0.5921 seconds with return value 0 请按任意键继续. . . */
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
如何在没有core文件的情况下用dmesg+addr2line定位段错误
用QT制作3D点云显示器——QtDataVisualization
网友评论