分享

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

 寒潭孤雁159 2019-12-09

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]\n',i,a[i]);                   //得到a[1]=1; a[2]=1; a[3]=1;

       }

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多