我正在尝试这样做:
for(int k=0; k<context.size(); k++)
{
cc_no_issue[k]=0;
}
有人可以告诉我如何在全球范围内做到这一点吗?每当我尝试时,我都会遇到这些错误:
在“for”之前预期的不合格身份 k没有定义类型
k没有定义类型
答案 0 :(得分:7)
这样做:
long cc_no_issue[100]={0};
这是正确的initialization。
注意:这会将所有内容初始化为0。
这句话:
long cc_no_issue[100]={1,2};
会将cc_no_issue[0]
设置为1,将cc_no_issue[1]
设置为2,其余设置为0.您可以看到上面的链接以获取更多信息。
答案 1 :(得分:5)
如果你有一个基本类型的全局数组,
int some_array[1000];
它会自动初始化为零。您不必初始化它。如果你确实需要运行初始化代码,你可以像下面这样做(在C ++中):
struct my_array_initializer {
my_array_initializer() {
// Initialize the global array here
}
};
my_array_initializer dummy_variable;
如果您使用的是GCC(或Clang),则可以使用main
属性在constructor
之前执行代码:
__attribute__((constructor))
void initialize_array()
{
// Initialize the global array here
}
答案 2 :(得分:2)
不,你不能拥有功能之外的代码。
你可以将它放在某个函数中,然后从main
开始调用它。
答案 3 :(得分:2)
一种方法是添加一个全局函数:
示例代码:
int* get_cc_no_issue()
{
if(!kIsMyArrayInitialized)
{
/* todo: somehow get "context" globally... */
for(int k = 0; k < context.size(); k++)
{
cc_no_issue[k] = 0;
}
kIsMyArrayInitialized = true;
}
return cc_no_issue;
}
如果您想要非零初始化,这将非常有用。
对于零初始化,请参阅另一个问题的答案: Is global memory initialized in C++?
答案 4 :(得分:2)
默认情况下,所有全局变量(文件范围内的变量)都初始化为零,因为它们具有静态存储持续时间(C99 6.7.8.10)。严格地说,你不需要将它们初始化为零,C标准保证它们默认为零。
如Ziyao Wei的回答所述,明确初始化它是一种很好的编程习惯。
答案 5 :(得分:0)
作为@Bo Persson,请在函数中执行此操作。但是,已经有一种算法可以在C ++中为您完成。无需编写手写循环。
std::fill(cc_no_issue, cc_no_issue+context.size(); 0) ;
回复你的评论:
要递增每个元素,您可以使用std::for_each传递函数对象作为第三个参数。
#include <iostream>
#include <algorithm>
using namespace std;
void incrementHelper( int& a ){
++a;
}
int main(){
int ar[] = { 1,2,3,4,5 };
for_each(ar, ar+5, incrementHelper );
for( int i=0; i<sizeof(ar)/sizeof(ar[0]); ++i ){
cout << ar[i] << endl;
}
return 0;
}
输出继电器:
2
3
4
5
6
for_each(ar,ar + 5,incrementHelper);
对于数组中的每个元素,算法将调用函数incrementHelper
。在C术语中,它可以作为数组中每个元素的回调。现在回调函数,通过引用接收传递的元素。因此,修改引用也将修改引用。 See the online demo.
答案 6 :(得分:0)
您可以将数组放在全局对象的构造函数中。
int cc_no_issue[256];
struct Init {
Init(int a, unsigned int size)
{
memset(a, 0, size);
}
};
Init arr(cc_no_issue, sizeof(cc_no_issue));
答案 7 :(得分:0)
你需要决定语言。这种机制在C和C ++中是不同的。基本上C在主函数启动之前没有运行代码的方法,所以你不能在C中进行数组的复杂初始化。在C ++中你有一些选项,一个是停止使用裸数组(无论如何都是C结构)而是将您的数组包装在一个类中,并在类构造函数中进行初始化。
CC cc_no_issue;
class CC
{
public:
CC()
{
// initialisation of array goes here
}
private:
int array[100];
};
另一种使用向量的方法,并编写一个函数来初始化向量。
std::vector<int> cc_no_issue = init_vector();
std::vector<int> init_vector()
{
std::vector<int> tmp;
// initialisation of tmp goes here
return tmp;
}