C++中的全局静态数组

C++中的全局静态数组,c++,arrays,global-variables,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); }

我有这样的想法:

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个元素就可以正常工作。然后终端显示一些非常大的数字。

这是因为您使用

静态int n=0

然后为零元素分配内存

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

或者,如果在读取n之后,请在读取n之后分配内存。也就是说,首先将数组全局声明为指针,如int*arr;,然后


cin>>n后

那是因为你使用

静态int n=0

然后为零元素分配内存

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

或者,如果在读取n之后,请在读取n之后分配内存。也就是说,首先将数组全局声明为指针,如int*arr;,然后

cin>>n后

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

此外,代码中没有任何全局数组,只有一个指针初始化为指向0整数分配的开始。 如果以后更改n,则不会更改该分配。

static是一个超负荷的关键字。 你使用它的方式,它意味着翻译单位是本地的

此外,代码中没有任何全局数组,只有一个指针初始化为指向0整数分配的开始。
如果以后更改n,则不会更改该分配。

n为零?那不会正常工作。另外,无论n的大小如何,当数组的索引从0到n-1时,您希望循环终止于iarr = new int[n];