在c ++中更改全局变量

时间:2009-07-22 12:02:37

标签: c++ variables global

有没有办法通过用户输入定义全局变量? 让我们说我用

#include...

#define N 12
double array[N][N]; 

void main();...

但我希望用户能够选择N是什么。 我是否必须将N​​作为局部变量或是否有解决方法(没有宏)? 我有一个非常小的程序,但有很多不同的变量需要N值。

可替换地,  有没有一种方法可以将一组变量发送到函数中,而不必每次都明确地将它们写出来。

例如

myfunction(var1,var2,var3...)

而是编写类似

的内容
myfunction(Allvariables)

非常感谢您的回答! 这是一个很棒的论坛。

5 个答案:

答案 0 :(得分:4)

int* data;

int main()
{
    int n;
    // get n from the user.

    data = new int[n];

    // use data.

    .
    .

    delete[] data;
}

或者只是忘记指针,并使用矢量!

std::vector<int> data;

data.push_back(55);

// just push_back data!

=============================================== ========================

编辑:: 如果你想使用Edouard A.方式:)

#include <iostream>
#include <sstream>
#include <vector>

int main(int argc, char* argv[])
{
    std::vector<double>::size_type dataSize = 0;
    std::stringstream convertor(argv[1]);
    {
        if(argc > 1)
        {
            convertor >> dataSize;

            if(convertor.fail() == true)
            {
                // do whatever you want here in case
                // the user didn't input a number.
            }
        }
    }
    std::vector<double> data(dataSize);

    // use the vector here.

    return 0;
}

在这种情况下我更喜欢使用lexical_cast,但我不确定你是否有Boost。

#include <iostream>
#include <vector>
#include <boost/lexical_cast.hpp>

int main(int argc, char* argv[])
{
    typedef std::vector<double>::size_type vectorSize;

    if(argc < 2)
    {
        // err! The user didn't input anything.
    }

    vectorSize dataSize = boost::lexical_cast<vectorSize>(argv[1]);
    std::vector<double> data(dataSize);

    // use the vector here.

    return 0;
}

答案 1 :(得分:2)

1 /是但您需要动态内存分配。程序参数作为argc和argv传递给主函数

int main(int argc, char **argv)

argc是参数的数量 argv是表示这些参数的空终止字符串数组

argv [0]是程序本身。

2 /你可以使用variadic function va_start&amp;类似,或者在结构中重写或分组数据并将其传递给函数

答案 2 :(得分:1)

不,这不可能这样做。您需要使用动态(运行时)内存分配( new [] )。要执行静态(编译时)内存分配,编译器需要在编译时知道内存块大小。

答案 3 :(得分:1)

我不确定您要对myFunction做什么,但听起来您想要查看创建a struct或传递std::vector

答案 4 :(得分:0)

创建一个类(或结构)AllVariables并传入它。

您没有说是否要在运行时或编译时定义N.如果要在编译时定义它,可以将N定义为编译器命令行参数。