将数组memset为1
我试图用一些整数初始化一个2d数组。如果我初始化数组为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
因为它们都以二进制表示为00000000
或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
但是如果你的requiremnt仅用于bool或二进制值,那么我们可以使用C99标准为C库设置
#include #include #include #include //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
输出:
你好,世界!
1 1 1 1 1