C 同时修改数组的所有元素
是否有一种方法可以同时修改数组的所有元素? 我的意思是for循环只是在数组中循环,然后一个接一个地执行所有操作 注: 这是.gsc/.csc(这是它自己的编程语言),但它遵循基本的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;
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>