Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 更改c+中的全局变量+;_C++_Variables_Global - Fatal编程技术网

C++ 更改c+中的全局变量+;

C++ 更改c+中的全局变量+;,c++,variables,global,C++,Variables,Global,有没有办法通过用户输入定义全局变量? 假设我使用 #include... #define N 12 double array[N][N]; void main();... 但是我希望用户能够选择N是什么。 我必须把N作为局部变量,还是有办法解决这个问题(没有宏)? 我有一个非常小的程序,但是有很多不同的变量需要N值 或者, 有没有一种方法可以将一组变量发送到函数中,而不必每次都显式地写出它们 比如说 myfunction(var1,var2,var3...) 而是写一些 myfunct

有没有办法通过用户输入定义全局变量? 假设我使用

#include...

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

void main();...
但是我希望用户能够选择N是什么。 我必须把N作为局部变量,还是有办法解决这个问题(没有宏)? 我有一个非常小的程序,但是有很多不同的变量需要N值

或者, 有没有一种方法可以将一组变量发送到函数中,而不必每次都显式地写出它们

比如说

myfunction(var1,var2,var3...)
而是写一些

myfunction(Allvariables)
非常感谢你的回答!
这是一个很棒的论坛。

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

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

int main(int argc, char **argv)
argc是参数数 argv是表示这些参数的以null结尾的字符串数组

argv[0]是程序本身

2/您可以使用可变函数va_start等,也可以使用函数重写,或者将数据分组到一个结构中并将其传递给函数

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!
std::矢量数据;
数据。推回(55);
//只要把数据推回去!
=======================================================================

编辑:: 如果你想使用爱德华A.方式:)

#包括
#包括
#包括
int main(int argc,char*argv[])
{
std::vector::size\u type dataSize=0;
std::stringstream转换器(argv[1]);
{
如果(argc>1)
{
转换器>>数据大小;
if(convertor.fail()==true)
{
//你想怎么做就怎么做以防万一
//用户没有输入数字。
}
}
}
std::矢量数据(数据大小);
//使用这里的向量。
返回0;
}
我更喜欢在这种情况下使用词法转换,但我不确定您是否有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;
}
#包括
#包括
#包括
int main(int argc,char*argv[])
{
typedef std::vector::size_type vectorSize;
如果(argc<2)
{
//错误!用户没有输入任何内容。
}
vectorSize dataSize=boost::词法转换(argv[1]);
std::矢量数据(数据大小);
//使用这里的向量。
返回0;
}

我不确定您想用myFunction做什么,但听起来您想看看创建或传递一个类(或结构)AllVariables并传递它


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

谢谢,我将检查替代结构,这可能就是我在这里需要的!谢谢你,伙计!我最终还是使用了向量!工作起来很有魅力!
#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;
}