如何使用全局变量而不将其声明为全局变量

How to use a variable globally without declaring it as a global?

本文关键字:全局变量 声明 何使用      更新时间:2023-10-16

我有一个像这样的switch语句

switch(option)
{
case 1:
{
    int randomVariable;
}
case 2:
{
}
case 3:
{
\ I want to use randomVariable here but it is not letting me since it is not in the same scope
}
}
}

对于如何解决这个问题有什么想法吗?请注意,randomVariable必须在case 1:下声明,randomVariable是一个数组。请尽量使用std库,请不要使用矢量,因为这是一个项目,矢量在这门课上根本不会讨论。

能够访问变量的区域称为其作用域。对于局部非静态变量,这个范围的边界用花括号定义({}),所以:

{
    ...
    int a = 0;
    switch (option)
    {
        case 1:
        {
            int b;
            a = 2;
        } // <-- the scope of b ends here
        ...
    }
} // <-- the scope of a ends here

请注意randomVariable必须在case 1:内部声明,因为这是创建数组

的选项。

因为你是在c++中编程,而不是C风格的数组使用std::vector,这是在连续的内存块中保存元素的容器,就像数组一样,但它可以改变大小:

#include <vector>
...
{
    std::vector<int> myVector;
    switch (option)
    {
        case 1:
        {
            int size;
            // value retrieved in run-time is assigned into size here
            myVector.resize(size, 0);
        }
        case 2:
        {
            // you can use your vector here:
            if (myVector.size() > 3)
                myVector[2] = 7;
        }
        ...
    }
} // <-- end of myVector's scope

在这个例子中,myVector.resize(size, 0);调整了vector内部使用的内存大小,使其足以容纳size元素,如果它的大小增加了,它也会将新元素插入该内存并将它们初始化为0。这里重要的是,myVector是一个具有自动存储持续时间的对象,这意味着当执行超出定义它的作用域时,内存将自动清理。如果你使用动态分配的c风格数组,这将使你免于丑陋的内存管理。

编辑:

在你的注释之后,对于你的用例,你可能想要这样的东西:

int * myArr = 0;
int myArrSize = 10;
switch (option) {
  case 1:
    if (myArr != 0) {
      // Clean up memory if we are re-initializing
      delete [] myArr;
    }
    myArr = new int[myArrSize];
    break;
  case 2:
    break;
  case 3:
    int test = myArr[1];
    break;
}
// Clean up memory when we are done with the array
delete [] myArr;

根据您的限制,它必须在case 1中初始化,那么只需将变量设置为指针并在case 1中使用variable = new something();

顺便说一下,这个作用域与"global"无关。

变量的作用域只在它被定义的块内,所以不可能在一个作用域内定义变量,即在case 1:内并在作用域外访问它,除非你打算在没有显式块{ ... }的情况下将1和3的情况结合在一起。

在switch语句可见的范围内定义randomVariable,以便在任何情况下都可以访问该变量。

{
    int randomVariable;
    switch(option)
    {
        case 1:
            {
            }
        case 2:
            {
            }
        case 3:
            {
                \ I want to use randomVariable here but it is not letting me since it is not in the same scope
            }
    }
}

开关上面的作用域可以是一个函数,也可以是另一个块,这取决于你的代码。

给你…

  • 创建一个新类(例如superClass)。
  • 创建一个名为randomVariable的属性字段存根,带有getter &setter方法。
  • 将该属性设置为静态。(这样它的值可以被全局使用,即使有不同的对象差异)。
  • 在你放置switch语句的类中继承这个类
  • 现在你可以初始化&在任何你想要的地方使用随机变量,设置它的新值或旧值。

希望这将帮助…!!