C++中的全局静态数组

A global static array in C++

本文关键字:静态 数组 全局 C++      更新时间:2023-10-16

我有这样的东西:

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 个前元素。然后终端显示一些非常大的数字。

那是因为你使用

static int n = 0;

然后为零个元素分配内存。

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

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

arr = new int[n];

cin >> n;

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

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