必须 locks code 完全 普通 赋值 释放 提示
在 Java 中,这是完全可以的,比如我们运行如下程序:
- package cn.darrenchan.storm;
- import java.util.Arrays;
- public class Test {
- public static void main(String[] args) {
- intnum = 5;
- int[] array =new int[num];
- System.out.println(Arrays.toString(array));
- }
- }
输出结果为:[0, 0, 0, 0, 0]
但是在 C++ 中则不然,在 c++ 中是不支持变量作为数组长度参数的,如 int num=10;int array[num];
这样写会提示编译错误 "表达式必须含有常量值"。C++ Primer 这本书中也确实这么写的,用 VS 编程编译也会报错,但是用 codeblocks 就不会,而且结果正确,还是不太明白原因。
但是我想实现类似的效果怎么办?
可以通过指针来动态申请空间实现动数组长度的变量赋值,写法如下:
- intnum=10;
- int *array;
- array =new int[num];
这样 array 就可以当做数组来用了,这个数组的长度可以在程序运行时由计算得来。如果是普通的数组如 int is[10] 编译时必须能确定数组长度,不然会报编译错误,这样灵活性受限比较大。我想这个就是 new 的存在原因之一吧,在栈中分配的内存,大小都是编译时就确定好的,如果想在运行时来动态计算使用内存的大小的话,就要用 new 这样的动态分配函数,来达到更高的灵活性。
注意:c++ 用 new 分配空间以后,不用的时候要记得 delete 释放内存,不然会有内存泄露问题。
C++ 中变量做数组长度
来源: http://www.bubuko.com/infodetail-2154589.html