首页 > 解决方案 > 在函数内部的声明中初始化一个数组并在外部使用它

问题描述

我想轻松地在函数内初始化一个数组:

    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();
    }

标签: c++arrayspointers

解决方案


使 arr[] 静态:

 void f()
 {
    static int arr[]{1, 2, 3};

    n = sizeof(arr) / sizeof(*arr);
    g_arr = arr;
 }

推荐阅读