使用memset初始化整数数组

时间:2019-01-17 22:44:03

标签: c

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

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

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

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

通过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,类似于字符串大小写?

1 个答案:

答案 0 :(得分:-1)

这里有两个例子

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;
}