C++中数组的动态联编和静态联编
使用数组声明来创建数组时,将采用静态联编,即数组的长度在编译时设置:
int tacos[10];//static binding, size fixed at compile time
使用 new[]运算符创建数组时,将采用动态联编(动态数组),即将在运行时为数组分配空间,其长度也将在运行时设置。使用完这种数组后,应使用delete[1释放其占用的内存:
int size;
cin >> size;
int *pz=new int[size]; //dynamic binding,size set at run time
...
delete []pz; // free memory when finished
数组名和指针变量都是如此,因此对于指针和数组名,既可以使用指针表示法,也可以使用数组表示法。
下面是一些示例:
int *pt=new int [10]; //pt points to block of 10 ints
*pt =5; //set element number 0 to 5
pt[0]=6; //reset element number 0 to6
pt[9]= 44; //set tenth element (element number 9) to 44
int coats[10];
*(coats +4)= 12; //set coats[4]to 12
来看一看数组表达式 stacks[1]。C++编译器将该表达式看作是 * (stacks+1),这意味着先计算数组第2个元素的地址,然后找到存储在那里的值。最后的结果便是stacks[1]的含义(运算符优先级要求使用括号,如果不使用括号,将给 * stacks 加 1,而不是给stacks加1)。
对C++感兴趣的朋友点这里:C/C++课程