gpt4 book ai didi

c - 使用memset初始化整型数组

转载 作者:行者123 更新时间:2023-11-30 19:50:53 24 4
gpt4 key购买 nike

我有一个 malloc 数组,如下所示:

int* buf;
buf = (int*)malloc(sizeof(int) * N)

其中 N 是整数数组中的元素数量。我试图将数组中的所有 N 个元素设置为特定值,例如 4(因此 buf = [4, 4, 4, ..., 4])。

出于意图和目的,这主要是一个实验,因此我尝试仅使用 memset,不使用 for 循环。这可能吗?

使用 memset,我会:

memset(buf, 4, sizeof(int)*N);

我假设在内存数组中的任何地方都放置了 4,但这似乎没有按预期工作。假设N = 20,则输出为:

[1,6,8,4,3,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,,0,0,0,0]

这不是我所期望的,但我注意到它已将第 4 个元素(对应于 sizeof(int)*N)设置为 4。我认为 memset 会将其全部设置为 4,类似于字符串大小写?

最佳答案

这里有两个例子

void memsetint(int *table, const int value, size_t size)
{
while(size--)
{
*table++ = value;
}
}

#define gmemset(table, value, size) _Generic((&table[0]), \
int * : memsetint, \
double * : memsetdouble) (table, value, size)

void memsetdouble(double *table, const double value, size_t size)
{
while(size--)
{
*table++ = value;
}
}

int main()
{
double d[1000];

gmemset(d, 45.34, 1000);
printf("%f\n", d[300]);

return 0;
}
<小时/>
#include <string.h>

void mymemset(void *buff, const void *value, const size_t size, size_t count)
{
unsigned char *b = buff;
while(count--)
{
memcpy(b, value, size);
b += size;
}
}

int main()
{
int x[1000];
int value = 5;

mymemset(x, (int []){10}, sizeof(int), 1000);
mymemset(x, &value, sizeof(int), 1000);

return 0;
}

关于c - 使用memset初始化整型数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54245347/

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