将数组设置为一个值

Dev*_*gay 16 c

是否有一种更简单的方法C将数组设置为一个值而不是使用for循环并逐个设置每个值?

Ada*_*eld 20

如果要将数组设置为全0,或者数组是字节数组,则可以使用 memset

// Set myArray to all 0's
memset(myArray, 0, numberOfElementsInMyArray * sizeof(myArray[0]));
Run Code Online (Sandbox Code Playgroud)

如果你需要以大于一个字节的单位将它设置为0以外的其他东西(例如将ints 的数组设置为1),那么没有标准函数可以做到这一点 - 你必须编写自己的for循环那.

  • @Daniel:如果你想要初始化为1的4字节整数数组,你需要用字节模式`01 00 00 00 01 00 00 00 01 00 00 00`等填充它``memset(array ,1,尺寸)`会给你`01 01 01 01 01 01 01 01`等 (4认同)
  • @Ben Jackson:因为`myArray`是指向动态数组的指针,所以不行. (3认同)

nop*_*ole 9

您可以将其设置为相同的值,但仅限于 0

如何将数组的所有成员初始化为相同的值?

将所有元素初始化为0:

int myArray[10] = { 0 }; // all elements 0
Run Code Online (Sandbox Code Playgroud)

gcc的页面也有一个答案.


pax*_*blo 5

如果它是一个字节值数组,或者您想将每个字节设置为特定值,则可以使用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.
Run Code Online (Sandbox Code Playgroud)

另一种可能性是在创建时初始化(每个下面真实初始化为,或在正确的尺寸的模板init函数),然后调用memcpyBLAT (a)中它到在稍后的日期的实际阵列.

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.
Run Code Online (Sandbox Code Playgroud)

后一种方法对于使用固定的预先计算的值填充结构也很方便:初始化具有所需字段的虚拟副本然后memcpy它而不是每次需要新实例时手动设置所有字段.


(a) 旁白:词源blat:

行话文件(见所有定义的术语表)列表blat为任何四个metasyntactic变量{foo, bar, thud, blat},或同义词blast,检测1.

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