zoukankan      html  css  js  c++  java
  • C++中的数组与指针

    数组与指针看起来很像

    int a[] = {1, 2 ,3};

    int *p = a;

    如此,我们可以p[0], p[1], p[2]

    看起来,与直接使用数组名没什么两样,但是看这段代码

    sizeof(a)

    sizeof(p)

    你就会知道,原来数组里还隐含了大小信息,这是指针所不能做到的

    严格的说,数组是一种内置的数据类型,C++标准对这种数据类型限定的某些行为使他看起来像

    指针

    1array are passed by reference by default

      这句话是说,我们可以将数组名赋给指针,将数组名放进函数参数中,则数组会退化成指针,再用sizeof得不到尺寸信息

         void func(int a[]);

      很多人以为这个函数只接受数组为参数,结果在函数内部sizeof(a)发现,它就是一指针int*,坑人

    2array are not assignable

       这里最关键的是数组名不能作为左值,不管是用int a[3]声明的数组还是int a[] = new int[3];得到的数组

          在基本数据类型里,引用也具有这种"从一而终"的特性

    3如何真正的传递数组(避免它退化成指针)

      看下面的函数原型

      void func(int(&a)[100]);

         这个函数只接受大小为100的整型数组,有没有发现,我们按引用类型来传参数,就能避免数组退化成指针

      当然这么写没什么用,毕竟一个只能传递定长数组的函数也只能看看而已

       利用c++模板编程的手法,可以这样子:

         template<size_t N>

         void func(int(&a)[N]);

          这样就能接受任意大小的数组了,而且只接受数组

  • 相关阅读:
    align 的用法
    layui 验证用法
    C# Post请求方法
    SQL 查询今天、昨天、7天内、30天的数据
    对Dijkstra名字发音的看法
    Ubuntu桌面图标消失且右键失效的解决办法
    Ubuntu下安装与配置Matlab
    ns 简单网络模拟
    JAVA包含第三方包的部署方法
    Ubuntu下配置ftp服务端
  • 原文地址:https://www.cnblogs.com/hustxujinkang/p/4981751.html
Copyright © 2011-2022 走看看