320374616 发表于 2020-3-6 14:31:02

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,为什么?

qiuyouzhi 发表于 2020-3-6 14:36:20

本来就是初始化,初始化默认都是0的

4goodworld 发表于 2020-3-6 14:49:15

本帖最后由 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,你会发现输出的结果是同一奇怪的数

人造人 发表于 2020-3-6 14:49:44

这是按字节填充,就当int是4个字节,那么
会填充成 01 01 01 01,而不是 01 00 00 00
前者是65793,后者是 1

4goodworld 发表于 2020-3-6 14:52:09

人造人 发表于 2020-3-6 14:49
这是按字节填充,就当int是4个字节,那么
会填充成 01 01 01 01,而不是 01 00 00 00
前者是65793,后者 ...

你的提醒让我意识到之前的描述还有错误

人造人 发表于 2020-3-6 14:52:39

抱歉,算错了,前者是 16843009

人造人 发表于 2020-3-6 14:53:59

#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

人造人 发表于 2020-3-6 14:54:39

页: [1]
查看完整版本: memset函数为什么不可以用别的数字填充