4

我是一个玩 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?请告诉我是否需要附上输出截图/澄清我的问题。

谢谢!

4

1 回答 1

11

b是指针,指针sizeof(b)的大小也是如此,在当前系统上很可能是 4 或 8。因此,您只需将前几个字节设置为 0,而不是整个数组。

如果您已声明b为数组,例如

int b[5];

然后sizeof(b)将是整个数组的大小,并且您memset将按预期工作。

于 2013-08-30T01:37:40.373 回答