我是一个玩memset和指针的新手。
当我编译并运行时:
main(){
int a;
int *b = (int *)malloc(5*sizeof(int));
memset(b,0, 5*sizeof(int));
if (b != NULL){
for(a=0;a<4;a++){
//b[a] = a*a;
printf
("Value of b %u\n", b[a]);
}
}
free(b);
b = NULL;
}
我可以将所有元素值打印为0.但是当我将memset行更改为
时memset(b,0, sizeof(b));
我总是得到一个带有大量数字的元素,我认为它是该元素的地址。但是在尝试使用以下内容打印元素的地址和值时
printf("Value of b %u and address %u\n", b[a], b+(a*sizeof(int)));
我得到两个不长的数字。
到底发生了什么?我是否以错误的方式使用了memset? 请告诉我是否需要附上输出截图/澄清我的问题。
谢谢!
答案 0 :(得分:11)
b
是一个指针,因此sizeof(b)
是指针的大小,在当前系统上很可能是4或8。所以你只是将前几个字节设置为0,而不是整个数组。
如果您已将b
声明为数组,例如
int b[5];
然后sizeof(b)
将是整个数组的大小,您的memset
将按预期工作。