一次设置多个数组索引?复合文字?

时间:2015-05-08 05:04:16

标签: c++ c arrays

index = {27,27,27,27,27}; //as many as rootsize

当我在函数中尝试这个时,编译器给出了一个错误。索引在同一文件中全局初始化:

int index[5];

错误:预期表达式         index = {27,27,27,27,27}; //和rootize一样多

这不合法吗?如何一次将数组设置为某些值?我需要一个循环吗?

4 个答案:

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