char a[5];
memset(a, 0, sizeof(a));
我知道这条语句可以把数组a清零,但是sizeof(a)不是只把前8位清零了嘛,后面的32位应该没变啊,不是应该写成这样才对吗
char a[5];
memset(a, 0, sizeof(a) * 5);
是不是原理类似于int a[5] = {0};有些编译器会自动把后面的补0
char a[5];
memset(a, 0, sizeof(a));
我知道这条语句可以把数组a清零,但是sizeof(a)不是只把前8位清零了嘛,后面的32位应该没变啊,不是应该写成这样才对吗
char a[5];
memset(a, 0, sizeof(a) * 5);
是不是原理类似于int a[5] = {0};有些编译器会自动把后面的补0
这种写法很常见的,sizeof(a)如果a是数组,这是整个数组的字节长度,这里返回的是5,如果写成sizeof(a[0])则是返回1,也就是数组单个元素的长度。
也就是说,你的第二行如果写成memset(a, 0, sizeof(a[0]) * 5);也是和第一行等价的。
如果这里数组类型不是char而是int (假设在32位系统上)这返回的是5*4=20字节。单个元素就是4字节长度。
你要记住的是sizeof返回的是字节长度。
给你一点扩展知识,有时候还会碰到sizeof(char)或者sizeof(int) sizeof(unsigned int)这种写法,里面放的是类型。也是可以的,分别为1 4 4
也就是类型所占字节的长度。更多地方还会在里面放结构体类型。如sizeof(struct node).这表示的是该结构体变量所占的字节大小.
如果我的回答对你有帮助,请您采纳!不懂的可以继续问我。
一枚上班还在偷偷答疑的“敬业”的程序员