new操作符
对于非数组类型<初值表达式>为可选项,对于数组类型则不含此项,应换为当作下标上界的表
达式。
格式举例:
(1) new int;
(2) new int(5);
(3) new char[10];
(4) new int[n];
(5) new double[m+1][N+1];
(6) new char*(&x);
执行第1条运算时将分配到具有4个字节的整数存储空间,并返回该存储空间的地址,即指向该
存储空间的指针,该指针的类型为int*。
执行第2条运算时同样分配到具有4个字节的整数存储空间,返回该存储空间的地址,并且对该
存储空间进行初始化,使之存储一个整数5。
执行第3条运算时,首先分配到具有10个字节的字符数组空间,然后返回该存储空间中存储第一
个元素的地址,其返回值类型为char*。
执行第4条运算时,首先分配到能够存储n个整数的数组空间,然后返回该存储空间首地址,即
存储第一个元素的地址,其返回值为int*类型。
注意:当采用new运算动态分配一维数组空间时,该数组的长度n既可以为一个常量表达式,也
可以为一个变量表达式。而在变量定义语句中定义的数组,其每一维的长度都必须是一个常量表
达式,不允许是变量表达式。当只有在程序运行时才能够确定待使用数组的长度时,则只能采用
动态分配建立该数组,不能采用变量定义语句定义它。
执行第5条运算时,首先分配(m+1)*(N+1)个双精度数存储空间,它是一个二维双精度数组空间
;然后返回第一个元素的地址。由于对应的一维数组的元素类型为double[N+1],所以返回值的类
型为double(*)[N+1]。
注意:当采用new运算动态分配二维数组空间时,第二维的长度(即列数)必须为常量表达式,
第一维的长度(即行数)可以为常量表达式,也可以为变量表达式。在上述第5条运算中,N必须
为一个事先定义的整型常量,m可以为常量,也可以为变量。
同理,当采用new运算动态分配二维以上数组的存储空间时,只有第一维的尺寸是可变的,其余
维的尺寸都必须为常量,返回值为一个指向数组的指针,该数组的类型为除上述第一维之外剩下
的数组类型。