C語言:模擬實現內存放置函數memset()
模擬實現內存放置函數memset()
我們查看庫函數可知,函數原型為:
void * __cdecl memset ( void *dst, int val, size_t count),我們常用於將數組arr向後幾個字節初始化置為0,而並不怎麼用於置為其他元素,如1。這是因為:
val = 1,是int型,將它賦給char型dest,則只把低八位賦給dest,下次再接著循環,每次都只把一個字節長度的1賦給dest。如此重復count次,結束。在輸出過程中,而arr是int型,一個int型是4個char型,即每次輸出的結果都是:1000 0000 1000 0000 1000 0000 1000 0000這個十進制的值。
代碼如下:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
void *my_memset(void *p1, int val, size_t count)
{
char *dest = (char *)p1;
char *ret = dest;
while(count--)
{
*dest = val;
dest = dest + 1;
}
return ret;
}
int main()
{
int arr[] = { 1, 3, 5, 6, 8, 9 };
int i = 0;
int *ret = my_memset(arr, 1, 16);
for (i = 0; i < sizeof(arr) / sizeof(arr[0]); i++)
{
printf("%d ", *(ret + i));
}
system("pause");
return 0;
}