将数组memset为1

use*_*000 9 c

我试图用一些整数初始化一个2d数组.如果我将数组初始化为0我得到正确的结果但是如果我使用其他整数我得到一些随机值.

int main()
{
    int array[4][4];
    memset(array,1,sizeof(int)*16);
    printf("%d",array[1][2]); <---- Not set to 1
}
Run Code Online (Sandbox Code Playgroud)

oua*_*uah 13

memset将数组的每个字节设置为1不是每个int元素.

使用所有值设置为1的初始值设定项列表或循环语句将值复制1到所有元素.


tor*_*rek 6

memset仅在逐字节的基础上工作.将这些位清零通常是因为所有的整数零通常都是全零位,因此将四个全零位字节分组为一个全零位int仍然会给出零.但是,对于非字节的东西,初始化所有这些东西的最简单方法就是显式初始化所有这些.


dea*_*eau 5

memset允许您将单个字节填充为内存,并且您正在尝试设置整数值(可能是 4 个或更多字节)。您的方法仅适用于数字0-1因为这些都以二进制表示为0000000011111111

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;
    }
}
Run Code Online (Sandbox Code Playgroud)