数组初始化及赋值的方法,memset的使用

Posted yyzyxy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数组初始化及赋值的方法,memset的使用相关的知识,希望对你有一定的参考价值。

1. 数组初始化:

  即定义时即赋值:

  int a[4]={0}; //每一个位置的int都为0

  int b[4]={1}; //只有第一个元素为1,其他都为0

  所以要想把数组初始化为其他值,则需要一个个的指定值: int b[4]={1,2,3,4};//比如指定为1,2,3,4

  或者先统一初始化为0,再利用for循环改变数组的每一个元素。

2. 数组的赋值:

  在定义过后,需要给数组每一个元素赋值时,不能再像初始化那样: 

             a[4] = {1,3,5,7}; //这是错误的,

             a={1,3,5,7};//这还是错的。

  只能利用for循环,或者利用memcpy从其他内存拷贝一份值过来。

  当使用完成后,局部数组会由函数自动释放,全局数组则需进行下清零。

  这时候就要用到memset函数。

    memset(a,0,sizeof(a));

  或者memset(a,0,sizeof(int)*4);   //sizeof取的是字节。  memset是按字节进行赋值的,这里为16个字节:4*4

 

3. memset函数:memset(void *s, int ch,size_t n);    // C语言:#include <string.h> 或者 C++:  #include <cstring>

一般只用来清零,或者初始化局部数组为0,以免出现局部数组的每一个元素为乱值。所以第二个参数一般为0或者-1.

要注意:

  3.1 memset是按字节进行赋值,

  所以假设你想利用memset给a数组每一位置为1,memset(a,1,sizeof(a)); // 这时候你去打印a的每一位,值都是16843009,而非你期望的1

        原因:int为四个字节,这时候每个字节被memset置为1,而每一个元素都是一个int,即 01 01 01 01,读取十六进制为 0x01010101,十进制为 16843009

        不过 char类型的可以使用memset随意赋值为自己想要的,因为 char只占一个字节,赋多少就是多少。

   e.g.:

                char a[3]={‘a‘ , ‘b‘, ‘c‘};

                memset(a, 1,sizeof(a));

      for(int i=0;i<sizeof(a)/sizeof(a[0]);i++){

        printf("a[%u]=[%u] ",i,a[i]);                   //得到a[1]=1; a[2]=1; a[3]=1;

       }

 

以上是关于数组初始化及赋值的方法,memset的使用的主要内容,如果未能解决你的问题,请参考以下文章

关于memset()

请说明结构体初始化数据赋值的几种方式

为啥memset不能将数组元素初始化为1

在c++中怎么用memset() 给二维char型数组赋值

memset初始化

关于memset()