在 C 中我们使用 calloc 方法时;所有保留的内存将被初始化为 0
.
有没有办法用另一个值初始化它而不迭代所有值?
例如:
int* example = calloc(100,sizeof(int));
这将创建一个包含 100 个零的数组,但我希望这是(例如)100 个。
最佳答案
calloc
多达memset
不知道存储在分配块中的数据的结构。用memset
其实没什么用与 0
不同的任何内容除了 char
的数组之外的其他东西类型。请注意 calloc
是 功能 malloc
加memset(..., 0)
,但在某些实现中可能要快得多。
按照标准,calloc
不存储 0
,但是 sets all bits zero .这不一定会导致 float 0.0
或空指针常量,因为它们可能有其他二进制表示。然而,对于整数类型,0
所有位都为零,所以 此 作品。
但仅限于0
,因为在大多数(如果不是全部)现代平台上整数至少使用 2 个字节,所以如果您按字节设置,您将触及同一整数的不同字节。试试看 memset(..., 3)
, 32 位 int
你会读到0x03030303
, 64 位 0x0303030303030303
.
要设置已分配数组的结构化值,无法使用循环:
// here we use int, but that can also be float or a struct
int *a = malloc(sizeof(*a) * 5);
if ( a != NULL ) {
for ( size_t i = 0 ; i < 5 ; i++)
a[i] = 1; // for a struct use a compound literal or set per field
...
free(a);
}
首先,您不应该担心性能。上面的模式很可能被您的编译器识别,并被高度优化的代码取代,这些代码将与
memset
一样快(如果不是更快) (但不是 calloc
)。
关于C - 如何在 calloc 中使用自己的值(而不是 0),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33176361/