C++中的全局静态数组
A global static array in C++
我有这样的东西:
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
,则不会更改该分配。
相关文章:
- C++17中函数模板中的静态数组初始化(MSVC 2019)
- 静态数组的自由动态数组
- 如何在C++中删除静态数组?
- 为什么 &a 和 c++ 中的静态数组相同?
- 为什么静态数组成员变量在调用对象的实例后不显示任何内容?
- C++ 返回指向函数内定义的静态数组的指针是否有效?
- 将在堆栈上声明的元素添加到静态数组
- const_cast静态数组以添加恒常性
- 动态分配的数组和静态数组之间的区别
- C++编译时使用 constexpr 字符数组指针分配静态数组?
- 我可以使用 constexpr 函数声明一个静态数组吗?
- 使用 lambda 初始化静态数组
- 为什么从函数返回数组时需要将数组声明为静态数组.(C++)
- 根据模板值确定的静态数组大小
- 如何使用 PHP-CPP 在 PHP 类中添加静态数组
- 包含不同大小静态数组的类的多个实例
- 从我的对象返回静态数组
- 如何避免在类中显式指定静态数组的大小
- 编译类型的时静态数组
- 来自函数参数的 C++ 静态数组声明