如何对array或struct做初始化? (memset()) (C/C++) (C)

当宣告C/C++的built-in type后,必须马上initialize该变量的值,因为C/C++在宣告变量时,仅为该变量配置了一块内存,却没对该变量设定任何初始值,所以该变量目前的值为宣告该变量前所残留的值,虽可直接使用该变量,但并没有任何意义。

尤其在使用array时,当宣告完array及其大小后,第一件事情就是为array中所有element设定初始值,通常我们会用for来设定

 1 #include  < string .h >
 2 #include  < stdio.h >
 3
 4 #define  ia_size 5
 5
 6 int  main()  {
 7  int ia[ia_size];
 8  for(int i = 0; i != ia_size; ++i) {
 9    *ia = 0;
10  }

11
12  for(int i = 0; i != ia_size; ++i) {
13    printf("%d",*ia);
14  }

15
16  return 0;
17}

用for写最少要两行程序,若使用memset(),只要一行就可搞定
 1 /* 
 2(C) OOMusou 2006 http://oomusou.cnblogs.com
 3
 4Filename    : memset0.cpp
 5Compiler    : Visual C++ 8.0 / gcc 4.1.0
 6Description : The memset() function fills the first n
 7              bytes of the memory area pointed to by 
 8              s with constant byte c.
 9Synopsis    : #include <string.h> 
10              void* memset(void* s, int c, size_t n);
11Release     : 11/25/2006
12*/

13 #include  < string .h >
14 #include  < stdio.h >
15
16 #define  ia_size 5
17
18 int  main()  {
19  int ia[ia_size];
20  memset(ia,0,sizeof(ia));
21
22  for(int i = 0; i != ia_size; ++i) {
23    printf("%d",*ia);
24  }

25
26  return 0;
27}

memset()除了可以初始化array外,也可用来初始化struct
 1 /* 
 2(C) OOMusou 2006 http://oomusou.cnblogs.com
 3
 4Filename    : memset1.cpp
 5Compiler    : Visual C++ 8.0 / gcc 4.1.0
 6Description : The memset() function fills the first n
 7              bytes of the memory area pointed to by 
 8              s with constant byte c.
 9Synopsis    : #include <string.h> 
10              void* memset(void* s, int c, size_t n);
11Release     : 11/25/2006
12*/

13
14 #include  < string .h >
15 #include  < stdio.h >
16
17 struct  Foo  {
18  int no;
19  double d;
20}
;
21
22 int  main()  {
23  Foo foo;
24  memset(&foo,0,sizeof(foo));
25
26  printf("%i\n",foo.no);
27  printf("%d\n",foo.d);
28
29  return 0;
30}

Reference
Linux C函式库详解辞典 P.73, 徐千祥, 旗标出版社

你可能感兴趣的:(struct)