我有这样的东西:
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
,则不会更改该分配。