如何在C中一次修改多个元素?

时间:2018-01-08 03:08:24

标签: c arrays

说我有一个数组

unsigned char digit[] = {0, 1, 2, 3, 4, 5, 6, 7};

然而我想修改数组的一部分,使数组变成类似:

{0, 1, 2, 3, 0, 0, 0, 0}

枚举我想要修改的每个元素并更改它们可能需要一些努力。特别是当我想要改变大量元素时。我知道在Python等语言中我可以使用一行代码做一些事情:

a = np.array([0, 1, 2, 3, 4, 5, 6, 7])
a[4:] = [0, 0, 0, 0]
//a: array([0, 1, 2, 3, 0, 0, 0, 0])

所以我想知道,在C中有类似的方法吗?

4 个答案:

答案 0 :(得分:3)

C中的可能性较少,但如果是unsigned char并将其值设置为零,则可以使用memset

memset(&digit[4], 0, 4);

Demo.

答案 1 :(得分:3)

一个选项是你可以编写一个子程序来实现其他语言提供的界面"在封面下#34;。您可能希望自己了解“VARARGS'使其采用可变数量的参数。

答案 2 :(得分:3)

其他人已经提到使用memset将数组元素设置为单个值,作为后续问题的一部分,您询问是否可以将某些元素设置为{1, 2, 3, 4}等特定值。

您可以在此处使用memcpy来实现这一目标。由于您的类型是unsigned char,我会保留它,但一般来说,此方法可用于任何类型。

memcpy(&digit[4], ((unsigned char[4]){1, 2, 3, 4}), 4 * sizeof(unsigned char));

您可以看到演示here

答案 3 :(得分:0)

我认为这可能不是最短的,但你可以轻松做到的只是:

digit[] = {0, 1, 2, 3, 4, 5, 6, 7};   %Having this

a=the number in your vector you want to start making ceros;
n=the lenght of digit;
for(i=a;i=n;i++)
{
    digit[n]=0;
}

这是我认为你可以使用的一种方式。 如果你想改变一个特定的

b=position;
digit[b]=c; %Where c is the number you want to put in there.

我希望它对你有用,祝你好运。