[英]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.