我有这个数组
unsigned char bit_table_[10][100];
用0填充它的正确方法是什么。 我试过了
std::fill_n(bit_table_,sizeof(bit_table_),0x00);
但是vc 2010将其标记为错误。
答案 0 :(得分:3)
初始化时:
unsigned char bit_table_[10][100] = {};
如果它是类成员,您可以在构造函数中初始化它,如下所示:
MyClass::MyClass()
:bit_table_()
{}
否则:
std::fill_n(*bit_table_,sizeof(bit_table_),0);
答案 1 :(得分:2)
bit_table_
的类型是unsigned char [10][100]
,它将衰减(即编译器允许将其隐式转换为)unsigned char (*)[100]
,即指向数组的指针100 unsigned chars
。
std::fill_n(bit_table_, ...)
实例化为:
std::fill_n(unsigned char (*)[100], ...)
这意味着它需要unsigned char [100]
类型的值来初始化bit_table_
。 0
不能转换为该类型,因此编译失败。
另一种思考方式是处理迭代器的STL函数只处理单个维度。如果您传递多维结构,那么STL函数将只处理单个维度。
最终,你不能这样做;无法分配数组类型。即,因为你不能这样做:
char table[100];
char another_table[100]= { };
table= another_table;
你不能在多维数组上使用std::fill_n
。
答案 2 :(得分:0)
您也可以尝试使用unsigned char bit_table_[10][100]= { 0 }
填充零。
int main()
{
unsigned char bit_table_[10][100]= { 0 };
return 0;
}