我正在尝试用一些整数初始化一个二维数组。如果我将数组初始化为 0,我会得到正确的结果,但如果我使用其他整数,我会得到一些随机值。
int main()
{
    int array[4][4];
    memset(array,1,sizeof(int)*16);
    printf("%d",array[1][2]); <---- Not set to 1
}
    我正在尝试用一些整数初始化一个二维数组。如果我将数组初始化为 0,我会得到正确的结果,但如果我使用其他整数,我会得到一些随机值。
int main()
{
    int array[4][4];
    memset(array,1,sizeof(int)*16);
    printf("%d",array[1][2]); <---- Not set to 1
}
    memset将数组的每个字节设置为1不是每个int元素。
使用将所有值设置为 1 的初始化列表或循环语句将值复制1到所有元素。
memset仅在逐字节的基础上工作。将位清零通常是有效的,因为所有整数零通常都是全零位,因此将四个全零位字节组合成一个全零位int仍然会给您零。但是,对于不是字节的东西,初始化所有它们的最简单方法就是显式初始化所有它们。
memset允许您将单个字节填充为内存,并且您尝试设置整数值(可能是 4 个或更多字节。)您的方法仅适用于数字0,-1因为它们都以二进制表示为00000000or 11111111。
for 循环并不太麻烦:
int main() {
    int i, val = 1, max = 4;
    int array[max][max];
    max = max * max;
    for(i = 0 i < max; i++) {
       array[i] = val;
    }
}
    因为memset对字节起作用并将每个字节设置为 1。
 
memset(hash, 1, cnt);
因此,一旦读取,它将显示的值16843009 = 0x01010101 = 1000000010000000100000001
不是0x00000001
但是如果您的要求仅适用于布尔值或二进制值,那么我们可以使用 C 库的 C99 标准进行设置
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>        //Use C99 standard for C language which supports bool variables
int main()
{
    int i, cnt = 5;
    bool *hash = NULL;
    hash = malloc(cnt);
    memset(hash, 1, cnt);
    printf("Hello, World!\n");
    for(i=0; i<cnt; i++)
        printf("%d ", hash[i]);
    return 0;
}
输出:
你好世界!
1 1 1 1 1