码迷,mamicode.com
首页 > 编程语言 > 详细

C++中变量做数组长度

时间:2017-07-05 19:59:08      阅读:217      评论:0      收藏:0      [点我收藏+]

标签:codeblock   大小   输出   受限   pac   orm   tor   也会   错误   

在Java中,这是完全可以的,比如我们运行如下程序:

package cn.darrenchan.storm;

import java.util.Arrays;

public class Test {
    public static void main(String[] args) {
        int num = 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就不会,而且结果正确,还是不太明白原因。

但是我想实现类似的效果怎么办?

可以通过指针来动态申请空间实现动数组长度的变量赋值,写法如下:

int num= 10;
int *array;
array = new int[num];

这样array就可以当做数组来用了,这个数组的长度可以在程序运行时由计算得来。如果是普通的数组如int is[10] 编译时必须能确定数组长度,不然会报编译错误,这样灵活性受限比较大。我想这个就是new的存在原因之一吧,在栈中分配的内存,大小都是编译时就确定好的,如果想在运行时来动态计算使用内存的大小的话,就要用new这样的动态分配函数,来达到更高的灵活性。

注意:c++ 用new分配空间以后,不用的时候要记得delete释放内存,不然会有内存泄露问题。

 

C++中变量做数组长度

标签:codeblock   大小   输出   受限   pac   orm   tor   也会   错误   

原文地址:http://www.cnblogs.com/DarrenChan/p/7122973.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!