[英]Setting an array to one value
有没有一种更简单的方法在C
中将数组设置为一个值而不是使用for
循环并逐个设置每个值?
如果要将数组设置为全0,或者数组是字节数组,则可以使用memset
// Set myArray to all 0's
memset(myArray, 0, numberOfElementsInMyArray * sizeof(myArray[0]));
如果你需要以大于一个字节的单位将它设置为0以外的其他东西(例如将int
的数组设置为1),那么没有标准函数可以做到这一点 - 你必须编写自己的for循环为了那个原因。
您可以将其设置为相同的值,但仅设置为0
将所有元素初始化为0
:
int myArray[10] = { 0 }; // all elements 0
gcc的页面也有一个答案。
如果它是一个字节值数组,或者您想将每个字节设置为特定值,则可以使用memset
:
char xyzzy[100];
int plugh[40];
memset (xyzzy, 7, sizeof (xyzzy)); // all chars set to 7.
memset (plugh, 0x42, sizeof (plugh)); // all integers set to (e.g.) 0x42424242.
另一种可能性是在创建时初始化(每个下面真实初始化为或者在正确大小的模板init
功能),则调用memcpy
到BLAT(一)到在稍后的日期的实际阵列。
static int template[] = { 1, 1, 1, 1, 1 };
int zorkmid[3];
memcpy (zorkmid, template, sizeof (zorkmid)); // ensure template is at
// least as big as zorkmid.
后一种方法对于使用固定的预先计算的值填充结构也很方便:初始化具有所需字段集的虚拟副本然后memcpy
它而不是每次需要新实例时手动设置所有字段。
(a)中 除了:的词源blat
:
Jargon文件 (参见所有定义的词汇表)将blat
列为四个metasyntactic变量{foo, bar, thud, blat}
或blast
,sense 1的同义词。
取决于价值。 如果它为零,则使用memset(a, 0, sizeof(a))
。 否则,如果它是一个char数组,你可以使用memset和其他值。 但是memset总是在char级别工作,所以如果你的数组不是char,那么零可能是有意义的。
这是一个古老的问题,但这是我的两分钱。
我猜计算机必须以某种方式迭代每个值。 那么为什么不在宏中使用for-loop呢? 这样你的代码就不会混乱,你会得到类似函数的东西。
对于堆栈分配的数组(具有编译时定义的大小):
#define fill_array(array, value) \
for(int i; i < sizeof(array)/sizeof(array[0]); i++) \
{array[i]=value;}
对于堆-alllocated数组(iter是指向数组的第一个条目的指针):
#define fill_array(iter, length, value) \
for(int i; i < length; i++) \
{*iter=value; iter++;}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.