1. 程式人生 > >C++中變量做數組長度

C++中變量做數組長度

指針 必須 locks code 完全 普通 賦值 釋放 提示

在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++中變量做數組長度