頭文件:#include <string.h>
定義函數:void * memset(void *s, int c, size_t n);
函數說明:memset()會將參數s 所指的內存區域前n 個字節以參數c 填入,然后返回指向s 的指針。在編寫程序時,若需要將某一數組作初始化,memset()會相當方便。
返回值:返回指向s 的指針。
附加說明:參數 c 雖聲明為int,但必須是unsigned char,所以范圍在0 到255 之間。
常用內存空間的初始化。
1、初始化字符數組(常用)
#include <stdio.h> #include <string.h> int main(void) { char s[5]; memset(s,'A',sizeof(s)); s[5]='\0'; puts(s); return 0; }
2、初始化數組(注意:初始化為0正確實現,其他初始值還是通過循環語句實現)
#include <stdio.h> #include <string.h> int main(void) { int i,array1[5],array2[5]; memset(array1,0,sizeof(array1)); for(i=0; i<5; ++i) printf("%d ",array1[i]); printf("\n"); memset(array2,1,sizeof(array2)); for(i=0; i<5; ++i) printf("%d ",array2[i]); return 0; }
通過庫函數memset()來對一個數組進行初始化,需要了解一下該函數的工作原理。庫函數memset()是針對字節操作的,其中第二個參數值被賦給第一個參數指向的內存地址開始的每一個字節,因此,這種初始化其實存在局限性,也導致其主要用於清除數組內容等。比如:假設i=0,1,2,...
memset(a,0,sizeof(a)); // 此時a[i]=0x00000000
memset(a,-1,sizeof(a)); // 此時a[i]=0xffffffff
memset(a,0x0f,sizeof(a)); // 此時a[i]=0x0f0f0f0f=252645135
由於500=0x1f4,400=0x190,因此,如果使用
memset(a,0x190,sizeof(a)); // 此時a[i]=0x90909090
所以,初始化過程還是建議使用循環語句來做。