在函数内部的声明中初始化数组,并在外部使用它
Initializing an array in declaration inside the function and using this outside
我想在函数中轻松初始化一个数组:
int arr[]{1, 2, 3};
它简化了阵列大小的计算:
int n = sizeof(arr) / sizeof(*arr);
但是,我需要保留这个数组,并且可以在函数之外访问它。
如何做到这一点?
首先,我有这个:
#include <iostream>
using namespace std;
int n{0};
int* g_arr{nullptr};
void f()
{
int arr[]{1, 2, 3};
n = sizeof(arr) / sizeof(*arr);
g_arr = arr; // you can't use g_arr value outside this function, since arr will be freed.
}
void b()
{
cout << n;
for (int i = 0; i < n; ++i)
{
cout << g_arr[i] << endl; // this is still wrong
}
}
int main()
{
f();
b();
}
使arr[]静态:
void f()
{
static int arr[]{1, 2, 3};
n = sizeof(arr) / sizeof(*arr);
g_arr = arr;
}
一个可能的解决方案是复制堆栈分配的数组:
#include <iostream>
#include <cstring>
int* g_arr = nullptr;
std::size_t n = 0;
void f() {
int arr[]{1, 2, 3};
n = sizeof(arr) / sizeof(*arr);
delete[] g_arr;
g_arr = new int[n];
std::memcpy(g_arr, arr, sizeof(arr));
}
void b() {
std::cout << n << 'n';
for (std::size_t i = 0; i != n; ++i) {
std::cout << g_arr[i] << 'n';
}
}
int main() {
f();
b();
}
如果可以,请使用矢量:
#include <iostream>
#include <vector>
std::vector<int> g_arr{};
void f() {
g_arr = {1, 2, 3};
}
void b() {
std::cout << g_arr.size() << 'n';
for (int const i : g_arr) {
std::cout << i << 'n';
}
}
int main() {
f();
b();
}
相关文章:
- 在函数内部的声明中初始化数组,并在外部使用它
- 在类函数中初始化外部作用域变量
- Windows C++静态库在初始化期间无法访问外部方法
- 当使用lambda进行变量的复杂初始化时,如何处理从内部抛出的lambda外部异常
- 使用编译器进行外部初始化时出错C++
- 声明后初始化类外部的数组
- 外部变量的初始化
- 如何在命名空间中初始化外部变量
- 在类外部初始化的 constexpr 静态成员的声明中是否需要 constexpr 说明符
- 初始化向量的向量(外部向量和内部向量)
- 为什么我的全球外部lambda变量在运行时不初始化
- 在外部功能中具有一个变量初始化或内部功能中的多个初始化是最有效的
- C++ 如何从 main() 外部访问在 main() 中初始化的对象
- 通过写入全局llvm的地址从执行引擎外部初始化全局llvm值有效吗
- 在C++中打印数组的元素,以及变量的内部与外部初始化
- 我应该在类构造函数内部还是外部初始化shared_ptr
- 何时使用外部链接初始化全局常量,避免静态初始化顺序惨败
- 初始化类-未解析的外部符号
- C++对象在main外部初始化
- 询问基本C++语法细节;使用 & 内部初始化与外部初始化