memset函数为什么不可以用别的数字填充
#include <stdio.h>#include<stdlib.h>
#include<string.h>
int main(void)
{
int a;
printf("%d\n",sizeof(a));
memset(a,1,100);
for(int i=0,j=0;i<5;i++)
{
for(j=0;j<5;j++)
{
printf("% 10d ",a);
}
printf("\n");
}
return 0;
}
上面的函数我使用1填充,打印出来却不是1,为什么?
本来就是初始化,初始化默认都是0的 本帖最后由 4goodworld 于 2020-3-6 14:53 编辑
int a;
这个是二维数组
那么
memset(a,1,100);其实你效果是让
a -a的值变为了0x01010101
但是你不要忘记了
a下面还有5个数,他们是基于 a的所存储的地址来反馈的,然后就会出现一个问题,a=0x01010101,就是地址为0x01010101,那么按照地址0x01010101去寻找a,你觉得你能找到什么东西呢?同理a的地址也是0x01010101,你会发现输出的结果是同一奇怪的数 这是按字节填充,就当int是4个字节,那么
会填充成 01 01 01 01,而不是 01 00 00 00
前者是65793,后者是 1
人造人 发表于 2020-3-6 14:49
这是按字节填充,就当int是4个字节,那么
会填充成 01 01 01 01,而不是 01 00 00 00
前者是65793,后者 ...
你的提醒让我意识到之前的描述还有错误 抱歉,算错了,前者是 16843009
#include <stdio.h>
#include <string.h>
int main(void)
{
int a;
memset(&a, 1, sizeof(a));
printf("%d\n", a);
return 0;
}
./main.exe
16843009
页:
[1]