簡體   English   中英

Memset將數組元素設置為0

[英]Memset to set array elements to 0

我是玩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? 請告訴我是否需要附加輸出屏幕截圖/闡明我的問題。

謝謝!

b是指針,因此sizeof(b)是指針的大小,在當前系統上很可能是4或8。 因此,您僅將前幾個字節設置為0,而不是整個數組。

如果您已將b聲明為數組,例如

int b[5];

那么sizeof(b)將是整個數組的大小,並且memset將按預期工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM