第三次作业总结,关于sizeof的易错点和数组作为函数参数的点

出现的问题

       以前是用数组做参数,都会传递数组的元素个数。在初始化构造函数时,因为手机号的个数是不确定的,所以需要使用一个数组。但是 重点来了,成员函数中不存在手机号的个数这一个成员变量,所以在构造函数传参时,我感觉不应该传入这一个参数,应该根据实参传递的数组,在构造函数中找出电话的个数。

解决问题的过程

       一开始,我使用的sizeof方法。
       一开始我以为sizeof方法就是计算数组的元素个数的。使用后发现结果不对,经过查阅资料,我才知道sizeof()计算的是变量在内存中的内存字节数。对于数组作为参数的时候,如果不传递数组的元素个数无法使用。原因在下面介绍。

  • 对于普通的数据类型,指针类型
    1、sizeof指的是哪一部分内容的内存空间
int a=9;
cout<<sizeof(a);
int *p;
cout<<sizeof(p);
  • 静态数组
    1对于静态数组,sizeof()的值,指的是数组名指向的内容所占的字节数
int a[6]={1,2,3};
cout<<sizeof(a);//虽然只有三个值,但是剩下的三个空间会默认初始化为0,所以sizeof的值是6个Int型的数据所占的内存数

        2、如何使用来计算数组的容量;注意:是容量不是元素个数

int a [6]={}1,2,3,4,5,6};
int n=sizeof(a)/sizeof(a[0]);
cout<<n;
  • 动态数组
    动态数组的数组名就是一个普通的指针变量

  • 数组作为实参传递:重点
    当数组当作参数传递的时候它就弱化为一个同类型指针
    也就是说,当定义了一个函数,函数的参数是一个数组,对于实参来说,是一个数组名,也就是一个指针,但是它的字节数指的是它所指向的内存的字节数。但是对于形参来说,就是一个单纯的指针变量。虽然可以通过数组的方法获取值,但是他的sizeof值即一个普通的指针类型的内存数。
    那么此时如何获取数组中有多少元素呢?(是元素,不是容量)(实参可以是动态数组,也可以是静态数组)
    答:此时,要定义一个容量很大的数组,此数组的容量要大于元素个数
    然后,定义一个计数器,利用数组中存放内容的默认情况(int 默认是0,string默认是""…),当数组遍历到默认值时,遍历结束。传出计数器的值

    例子如下:这是一个构造函数。其中tel初始化时,因为不可以传递元素的个数,所以采用上述方法进行初始化,代码的逻辑仔细想想便可明白
    易错点:在main方法中,存储tel的数组容量必须大于已经存储的数据的个数,才会有系统的默认值

  Person(string idnum, string pname, string *ptel, string pqq, string pweixin, string paddress) : idNum(idnum)
    {
        name = pname;

        string *p = ptel;
        int iLen = 0;
        while (p[iLen] != "")
        {
            iLen++;
            // *p++;
            p++;
            // a++;
        }
        tel = new string[iLen + 1];
        for (int i = 0; i < iLen + 1; i++)
        {
            tel[i] = ptel[i];
            // cout<<p[i]<<" ";
            // cout<<ptel[i]<<" ";
        }


        qq = pqq;
        weixin = pweixin;
        address = paddress;
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值