index = {27,27,27,27,27}; //as many as rootsize
当我在函数中尝试这个时,编译器给出了一个错误。索引在同一文件中全局初始化:
int index[5];
错误:预期表达式 index = {27,27,27,27,27}; //和rootize一样多
这不合法吗?如何一次将数组设置为某些值?我需要一个循环吗?
答案 0 :(得分:4)
您无法直接指定数组。但是,您可以从复合文字memcpy()
{\ n}}获取它:
#include <string.h>
memcpy(index, (int [5]){ 27, 27, 27, 27, 27 }, sizeof index);
请注意,像这样的复合文字是C功能,但不是C ++。
答案 1 :(得分:2)
您不能在执行此操作时初始化数组,因为数组名称不能是C中可修改的左值。
int index[5] = {27,27,27,27,27};
是有效的初始化
答案 2 :(得分:2)
只需写下int index[5] = {27,27,27,27,27}
即可。并解决了你的问题。
答案 3 :(得分:2)
在C ++中,您可以使用标头std::array
中声明的标准类<array>
。
例如
#include <array>
//...
std::array<int, 5> index;
//...
index = { 27, 27, 27, 27, 27 };
否则,您可以使用标头std::fill
中声明的标准算法std::fill_n
或<algorithm>
来为数组填充值。
例如
#include <algorithm>
#include <iterator>
//...
int index[5];
//...
std::fill( std::begin( index ), std::end( index ), 27 );
// or
std::fill( index, index + 5, 27 );
或者
#include <algorithm>
//...
int index[5];
//...
std::fill_n( index, 5, 27 );
在C中,您还可以将数组包含在结构中并使用复合文字。例如
struct array_t
{
int index[5];
} a;
//...
a = ( struct array_t ){ { 27, 27, 27, 27, 27 } };
for ( size_t i = 0; i < 5; i++ ) printf( "%i ", a.index[i] );
当然,您可以在声明
时初始化数组int index[5] = { 27, 27, 27, 27, 27 };