gpt4 book ai didi

C - 如何在 calloc 中使用自己的值(而不是 0)

转载 作者:行者123 更新时间:2023-12-02 06:31:59 25 4
gpt4 key购买 nike

在 C 中我们使用 calloc 方法时;所有保留的内存将被初始化为 0 .

有没有办法用另一个值初始化它而不迭代所有值?
例如:

int* example = calloc(100,sizeof(int));

这将创建一个包含 100 个零的数组,但我希望这是(例如)100 个。

最佳答案

calloc多达memset不知道存储在分配块中的数据的结构。用memset其实没什么用与 0 不同的任何内容除了 char 的数组之外的其他东西类型。请注意 calloc功能 mallocmemset(..., 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com