• memset()函数需要注意的问题


    1.使用memset( )函数要带上头文件<cstirng>

    2.看下面几个例子:

    例一:

    cin>>m;
    int **p;
    p=new int*p[m];
    for(int i=0;i<m;i++)
    {
        p[i]=new int[m];
    *1: memset(p,
    0,sizeof(p[i]));
    *2: memset(p,0,m);
    *3: memset(p,0,sizeof(int)*m); }

    例二:

    cin>>m;
    int p[m];
    *1: memset(p,0,sizeof(p));
    *2: memset(p,0,m);
    *3: memset(p,0,sizeof(int)*m);

    例三:

    cin>>m;
    int *p;
    p=new int[m];
    *1: memset(p,0,sizeof(p));
    *2: memset(p,0,m);
    *3: memset(p,0,sizeof(int)*m);

    例一中三种memset()初始化方法中只有*3:是对的,*1:错在p[i]是指针,sizeof()计算的是指针长度而不是数组长度;*2:错在memset()函数第三项数据的单位是字节,申请m个int型数据有m*4个字节,应写成改写m*4。

    例二中三种memset()初始化方法中只有*2:是错的,*1:和上面不同这里是直接定了数组,而不是先声明指针,在动态分配空间,所以sizeof()计算的就是数组的字节数。

    例三中三种memset()初始化方法中只有*3:是对的,*1:,*2:在上面两个都讲了,对比着看一下。

    3.小结

    memset()的几点说明:括号里的第三项是字节,当时数组时可以用sizeof()直接计算,计算出的是数组的总字节数,当定义指针,用指针生成数组,不可用sizeof(),这时计算的是一个指针的字节数,并非数组字节数,可以

    先计算类型字节数乘以申请的数量,比如若申请长度为10的数组,第三项不可以直接写10,应写成40,因为这一项代表字节,十个数乘以整型字节数四即:10*4=40,应写成40;一般memset()函数第二项为0,-1(也可初始化为无穷大,如63)不能是1。

  • 相关阅读:
    CSS—BFC学习
    JS函数声明及函数表达式相关
    你想要的正则表达式笔记
    WordPress搭建自己的网站
    声纹识别
    WordPress搭建自己的网站
    L--jsp和servlet
    L--网页跳转
    L1--指针
    L--Java关键字final、static
  • 原文地址:https://www.cnblogs.com/zwsmile/p/11595059.html
Copyright © 2020-2023  润新知