数组的初始化:
- 静态 int array[10] ; 定义了数组array,未初始化
- 静态 int array[10]={1,2} ;定义并初始化了数组array
- 动态 int *array =new int [10]; delete []array ; 分配了长度为10的数组array;
- 动态 int *array =new int [10](1,2); delete []array ; 分配了长度为10的数组array,并初始化了前两个数组;
静态数组与动态数组:
静态数组在编译时必须知道其长度即需要常量表达式指定数组的大小,数组只在定义它的块语句内存中存在。
动态数组在运行时动态分配数组,虽然数组的长度是固定的,但动态分配的数组不必在编译时知道其长度,可以在运行时才确定数组长度。而且动态分配的数组将一直存在,直到程序显示释放它为止。
int getMostGold(int n,int w)
{
int preResults[] = new int[n];
int results[] =new int[w];
}
如上代码就是动态分配的结果 。
数组作为函数参数传递:
void fun(int * array);
void fun(int array[]);
数组名作为函数形参时,在函数体内仅仅是一个指针,同时还失去了常量特性,可以做自增增减操作,可以被修改。
void foo1(int a[10])
{
return;
}
void foo2(int a[])
{
return;
}
上面两段代码本质是一样的,虽然第一个指定了数组大小,但编译器不承认,只看作一个指针。因此如果想固定大小,可以另外添加一个形参,如length等。或者利用指针和引用。
void foo2(int(&a)[10])
{
return;
}
这里定义了一个含有10个元素的数组的引用,引用在形参中不会退化,因此当传入大小不一样时,编译不会通过。