我希望创建以下内容:
int amount[i];
作为一个全局变量(练习使用线程和互斥体)但变量i
是在程序启动时定义的:
./a.out 10
我如何通过main(argv[1]
)获取值并相应地创建全局?
答案 0 :(得分:4)
您可以使用全局指针变量,然后根据argv [1]分配内存。
$(".cart_hover").hover(function(){
$("#header-cart").toggleClass("skip-content","show-content");
});
答案 1 :(得分:1)
您尝试在全球范围内使用可变长度数组。这不会起作用(全局变量需要具有恒定的已知大小,否则编译将很困难)。
恕我直言,你不应该首先使用全球。最好使用局部变量,并通过参数将其传递给需要访问它的程序的函数/部分。 恕我直言,你不应该首先使用VLA。我选择这样的事情:
int main(int argc, char ** argv) {
// check arguments, not done here!
int value = atoi(argv[1]);
// Check that it's actually usable as a size!
size_t count;
if (value >= 0) {
count = value;
}
else {
// Fires of hell here
exit(1);
}
int * amount = malloc(sizeof(int) * count); // add error check, please!
// use at will
free(amount);
return 0;
}
如果你坚持使用全局变量,那么可以使(常量)指针amount
成为全局变量。
另外:当从分离的线程访问数据时,首选使用堆分配的数据而不是使用VLA分配的堆栈,因为当线程尝试访问时,VLA可能已经超出了范围它!
答案 2 :(得分:1)
使用constexpr 关键字将任何非常量变量设为constexpr。它将避免编译器错误,但要注意变量。
例如:
#include<iostream.h>
constexpr int afun()
{
return(3);
}
enum
{
TOTAL_NO_OF_PACKETS = afun() // You can use for Enum also
};
unsigned packets[afun()]; // Using in Global array
void main()
{
// **
}
答案 3 :(得分:0)
无法使用用户输入创建全局变量。基本上可以通过在程序代码中定义全局变量来使用全局变量。