Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 同时修改数组的所有元素_C_Arrays - Fatal编程技术网

C 同时修改数组的所有元素

C 同时修改数组的所有元素,c,arrays,C,Arrays,是否有一种方法可以同时修改数组的所有元素? 我的意思是for循环只是在数组中循环,然后一个接一个地执行所有操作 注: 这是.gsc/.csc(这是它自己的编程语言),但它遵循基本的C语法: function setCOD7DecodeFx() { alphabet = strTok("a b c d e f g h i j k l m n o p q r s t u v w x y z", " "); test = "text"; is_done = false;

是否有一种方法可以同时修改数组的所有元素? 我的意思是for循环只是在数组中循环,然后一个接一个地执行所有操作

注: 这是.gsc/.csc(这是它自己的编程语言),但它遵循基本的C语法:

function setCOD7DecodeFx()
{
    alphabet = strTok("a b c d e f g h i j k l m n o p q r s t u v w x y z", " ");
    test = "text";
    is_done = false;

    //I want all of the letters of text to change at the same time
    while(!is_done)
    {
        //I want this to happen without having to do text[num]
        test[0] = alphabet[rand(0, alphabet.size - 1)];
        test[1] = alphabet[rand(0, alphabet.size - 1)]; //rand -> rand(min, max)
        test[2] = alphabet[rand(0, alphabet.size - 1)]; //alphabet.size -> counts all elements in an array
        test[3] = alphabet[rand(0, alphabet.size - 1)];
        wait 0.25;
    }
    wait 3;
    is_done = true;
    test = "text";
}
它与foreach语句一起工作吗?我知道foreach不存在于C中,但它存在于gsc中

foreach(element in array)
要修改像
test
(不超过
int
字符的大小)这样的小数组,代码可以使用以下具有许多限制(endian、
int
大小等)

#包括
内部主(空){
常量无符号基字母='a';
const unsigned offset_pow2=5;//a-z和“{124;}~”以及代码127

const unsigned char_mask=(1u)这应该是非常自解释的。我希望我尽可能清楚地说明它。“我的意思是for循环只是在数组中循环,并逐个执行所有操作。”是的,这是正确的。有些语言的内置方法似乎可以同时对所有数组项进行操作,但在幕后,它们仍然只是一次更新一个。C不会费心对您隐藏细节。如果有足够的内核,您可以将其与例如OpenMP(或手动)并行但是这四个字节的开销将是巨大的。另外:
rand
不是线程安全的,因此您可能会得到四个相等的值。这取决于。使用C(假设执行一行)最接近于明显的同时赋值的是在初始化期间。例如:
char array[3]={{0};
,或使用诸如
memset()之类的函数
。但正如其他评论所述,即使它们同时出现,内存位置也在一次修改一个。请向投票人发表评论。这里提出的问题来自一位显然在钻研C语言的程序员。这似乎是一个真诚的、格式良好的问题,用格式化的代码来说明问题,并且是actu如果你给艾丽一个机会的话,她会很有趣。我看不出有什么必要投反对票。如果OP有什么事情应该做得不同,就把它写进评论里。
#include<stdlib.h>

int main(void) {
    const unsigned base_letter = 'a';
    const unsigned offset_pow2 = 5;  // a-z and "{|}~" and code 127

    const unsigned char_mask = (1u << offset_pow2) - 1;
    unsigned mask = 
        char_mask << 24 | char_mask << 16 | char_mask << 8 | char_mask;
    unsigned offset = 
        base_letter << 24 | base_letter << 16 | base_letter << 8 | base_letter;
    union {
      char test[5];
      unsigned r;
    } u = { "text" };
    u.r = (rand() & mask) + offset;  // Set all characters at once
    printf("<%s>\n", u.test);
}
<nury>