C ++中的全局静态数组

时间:2014-11-19 17:58:38

标签: c++ arrays global-variables

我有这样的事情:

static int n = 0; // global static int
int *arr = new int[n]; // global int*

int randToArray(int arr[], int min, int max) {
    srand(time(NULL));
    for(int i = 0; i <= n; i++) {
        arr[i] = (rand() % max + min);  
    }           
}

void printArray() {
    if(n) {
        for(int i = 0; i < n; i++)
        cout << arr[i] << endl; 
    } else
        cout << "The array hasn't been drawed yet.";        
}

然后在主要功能中我有一个带开关的菜单和用于获取随机数字和打印数组的选项:

switch(option) {
case 1:
    cout << "Set the size of the array: ";
    cin >> n;
    randToArray(arr, 1, 99);
    break;
case 2:
    printArray();
    wait();
    break;
}

我需要全局使用我的数组才能在其他几个函数中使用。

除了一件事之外,一切都有效:当我想要打印数组时,我只能正常工作8个第一个元素。然后终端显示一些非常大的数字。

2 个答案:

答案 0 :(得分:4)

那是因为你使用

static int n = 0;

然后为零元素分配内存。

例如,更改行static int n = 256;,为256个元素分配内存。

或者,如果您之后阅读n,请在阅读n之后分配内存。也就是说,首先全局声明数组(技术上是一个指针),如int *arr;,然后

arr = new int[n];
cin >> n;

之后

答案 1 :(得分:0)

static是一个过载的关键字 您使用它的方式,意味着翻译单位本地。

此外,您的代码中没有任何全局数组,只有一个指针被初始化为指向分配0 int s的开头。
如果您稍后更改n,则该分配将无法更改。