zoukankan      html  css  js  c++  java
  • 数组初始化及赋值的方法,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;

           }

  • 相关阅读:
    StackView
    横竖屏
    Html
    UILabel
    NSString
    NSPredicate|谓词
    iphone
    函数
    UIBezierPath
    UICollectionView
  • 原文地址:https://www.cnblogs.com/yyzyxy/p/10336480.html
Copyright © 2011-2022 走看看