一维数组的初始化问题

参考了:

http://bbs.csdn.net/topics/310136813

http://blog.csdn.net/sibylle/article/details/2026915

个人新博客,欢迎关注:http://readus.org

一. 数组可以用一个初始列表值来初始化,如下所示:

 

  1. int array1[] = {1, 5, 8, 9}; 
  2. char array2[] = {'a', 'c', 'f', 'd', 'a'}; 
int array1[] = {1, 5, 8, 9};
char array2[] = {'a', 'c', 'f', 'd', 'a'};

1. 当数组定义时没有指定大小,初始化时使用列表值来初始化了,如上所示,则数组大小由初始化时列表元素个数决定,所以array1大小为4,array2大小为5;

 

2. 如果明确指定了大小,在初始化时,列表的元素个数超过了已指定的大小则会产生错误,如:

 

  1. char array[2] ={'a','b',0};   //错误:太多的初始化值了 
  2. char array[3] ={'a','b',0};   //正确 
char array[2] ={'a','b',0};   //错误:太多的初始化值了
char array[3] ={'a','b',0};   //正确

3. 如果初始化时指定的列表元素个数比数组大小少,则剩下的元素都会被初始化为0;如

 

 

  1. int array[8]={1,2,3,4}; 
  2. 等价于 
  3. int array[8]={1,2,3,4,0,0,0,0}; 
int array[8]={1,2,3,4};
等价于
int array[8]={1,2,3,4,0,0,0,0};

4. 字符数组可以方便的用字符串进行初始化,例如:

 

 

  1. char string[] = "abcdefghijklmn"
char string[] = "abcdefghijklmn";

二. 使用memset初始化数组

 

先看看memset的函数说明:

 

  1. MEMSET(3) BSD Library Functions Manual MEMSET(3)
  2.  
  3. NAME 
  4.      memset -- fill a byte string with a byte value 
  5.  
  6. LIBRARY 
  7.      Standard C Library (libc, -lc) 
  8.  
  9. SYNOPSIS 
  10.      #include <string.h> 
  11.  
  12.      void * 
  13.      memset(void *b, int c, size_t len); 
  14.  
  15. DESCRIPTION 
  16.      The memset() function writes len bytes of value c (converted to an unsigned char) to the byte string b. 
  17.  
  18. RETURN VALUES 
  19.      The memset() function returns its first argument. 
  20.  
  21. SEE ALSO 
  22.      bzero(3), memset_pattern(3), swab(3), wmemset(3) 
  23.  
  24. STANDARDS 
  25.      The memset() function conforms to ISO/IEC 9899:1990 (``ISO C90''). 
MEMSET(3)                BSD Library Functions Manual                MEMSET(3)

NAME
     memset -- fill a byte string with a byte value

LIBRARY
     Standard C Library (libc, -lc)

SYNOPSIS
     #include <string.h>

     void *
     memset(void *b, int c, size_t len);

DESCRIPTION
     The memset() function writes len bytes of value c (converted to an unsigned char) to the byte string b.

RETURN VALUES
     The memset() function returns its first argument.

SEE ALSO
     bzero(3), memset_pattern(3), swab(3), wmemset(3)

STANDARDS
     The memset() function conforms to ISO/IEC 9899:1990 (``ISO C90'').

memset通常用来对一段内存空间全部设置为某个字符,一般情况下用于对定义的字符串进行初始化为 ' ' 或者 ’\0';例如

 

 

  1. char array[100]; 
  2. memset(array, '\0', sizeof(array)); 
char array[100];
memset(array, '\0', sizeof(array));

 

也可这样初始化一个整型数组为0:

 

  1. int array[10];  
  2. memset(array, 0, sizeof(array)); 
int array[10]; 
memset(array, 0, sizeof(array));

但是,看下面的例子:

 

 

  1. int array[10];  
  2. memset(array, 1, sizeof(array)); 
int array[10]; 
memset(array, 1, sizeof(array));

是否array中所有的值都为1呢?

 

答案:不为1,而都是16843009,这是为何呢?

从上面的memset函数说明可以看出,memset的初始化是按字节进行的,在进行memset(array, 1, sizeof(array));调用时,就是对array执行的sizeof(array)个字节进行赋值,每个字节都用ASCII为1的字符去填充,转为二进制后,1就是 00000001,占一个字节,一个 int 类型占4个字节,合起来就是 1 00000001 00000001 00000001,即16843009.就完成了对一个int类型的赋值,所以上面数组中的值都为16843009.

三. 用循环初始化数组

例如:

 

  1. int array[10]; 
  2. for(int i = 0; i < 10; ++ i) 
  3.         array[i] = 0; 
int array[10];
for(int i = 0; i < 10; ++ i)
        array[i] = 0;

这个肯定成功。

posted @ 2014-05-06 11:46  292873711  阅读(406)  评论(0编辑  收藏  举报