繁体   English   中英

将数组设置为一个值

[英]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功能),则调用memcpyBLAT(一)到在稍后的日期的实际阵列。

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的同义词。

反过来, blast (感应1)被定义为BLT不是三明治)的同义词,其“涉及任何大的位字段复制或移动操作”。

取决于价值。 如果它为零,则使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM