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