【发布时间】:2016-10-14 15:52:57
【问题描述】:
有没有办法同时修改数组的所有元素? 我的意思是 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)
【问题讨论】:
-
这应该是不言自明的。我希望我说得尽可能清楚。
-
“我的意思是 for 循环只是循环遍历数组并一个接一个地执行所有操作。” 是的,这是正确的。一些具有内置方法的语言似乎可以一次对所有数组条目进行操作,但在幕后它们仍然一次只更新一个。 C 不会费心试图向你隐藏细节。
-
给定足够多的内核,您可以使用例如:OpenMP(或手动)并行化它,但是这四个字节的开销将是巨大的。另外:
rand不是线程安全的,因此您可能会得到四个相等的值。或不。这取决于。 -
最接近使用 C 的明显同时赋值(假设单行执行)将是在初始化期间。 eg:
char array[3] = {{0}};example here,或者使用memset()等函数。但正如其他评论所述,即使它们同时出现,内存位置也会一次修改一个。 -
评论反对选民。这里提出的问题来自一个显然正在研究 C 的程序员。这似乎是一个真诚的、格式良好的问题,并配有格式化的代码来说明问题,如果你给它一个机会,它实际上很有趣。 我认为没有必要投反对票。如果 OP 有什么不同的做法,请将其放入评论中。