数组与指针看起来很像

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]);

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

转载于:https://www.cnblogs.com/hustxujinkang/p/4981751.html

C++中的数组与指针相关推荐

  1. 【VS开发】【编程开发】【C/C++开发】结构体中的数组与指针的内存分配情况说明...

    [VS开发][编程开发][C/C++开发]结构体中的数组与指针的内存分配情况说明 标签:[VS开发] [编程开发] 主要是疑惑在结构体定义的数组的内存空间与指针动态分配的内存空间,在地址上连续性.以及 ...

  2. c语言指针转换成数组,浅议C语言中灵魂数组和指针的互操作(转)

    浅议C语言中灵魂数组和指针的互操作(转)[@more@]曾听好多朋友说,C是一种怀旧的语言,因为它的历史很久远,然而自从各种面向对象的编程语言的相续出现让它的影响力日减. 当然了,这是无可非议的,但是 ...

  3. C语言中的sizeof中的数组和指针

    1.引子 今日在看动态规划的0-1背包问题,看完后还是打算自己写着试试,毕竟实践才能出真知嘛.动态规划的结果是个二维数组dp,我copy书上的例子进行初始 memset(dp,0,sizeof(dp) ...

  4. c++中的数组和指针,引用

    按大类可以分为: 1.数组: 1.类中的数组,类中的数组被当作一组变量来看待. 2.函数参数中的数组,形参数组被当作是指针. 3.new 和 delete 意思是释放指针所指向对象所占的内存空间,然后 ...

  5. C加加中的数组与指针-基础语法

    首先先给上代码 #include<iostream> using namespace std;void sz_1() {const int maxsize = 100;int const ...

  6. java指针的数组_Java中的数组是指针

    Java中的数组byte[] , int[] 之类的, 遵循的原则, 所有用到某个数组的变量都是指向的同一个引用 public class Test { @org.junit.Test public ...

  7. C++中的数组,指针解析

    哎,由于上课的时候没有听课,导致指针这里真的是似懂非懂,虽然对写代码影响不大,但是总是精确度下了一个档次,所以今天趁机把这写个玩意儿弄明白点,省的以后每次都得查.咱们不求文章长,只求内容清楚~  如果 ...

  8. 指针数组 c ++_了解C ++中的数组指针

    指针数组 c ++ 介绍 (Introduction) Today in this tutorial, we are going to understand the concept of the Po ...

  9. 【C++】细说C++中的数组之“静态”数组

    [fishing-pan:https://blog.csdn.net/u013921430转载请注明出处] 前言 数组是C/C++以及各种编程语言中最常用的一种数据结构,了解数组的性质并且学会使用数组 ...

最新文章

  1. VC 文件操作(文件查找,打开/保存,读/写,复制/删除/重命名)
  2. 读PPPOE/PPPOA白皮书小结
  3. 用Scikit-learn和TensorFlow进行机器学习(四)
  4. wxWidgets:在全局范围内捕捉关键事件
  5. 视频直播点播nginx-rtmp开发手册中文版
  6. Tab控件中滚动条的设置
  7. mysql忘记了密码、允许远程连接、mysql卸载 -- linux
  8. C# 模拟鼠标(mouse_event)
  9. 非参数统计的Python实现—— Fisher 精确性检验
  10. FreeImage通用图像加载实现
  11. 全国31个省市2001-2017年平均受教育年限学习数据集
  12. 质数/素数 - 合数
  13. html网页如何导入word,怎么把网页导入word
  14. 百度人脸接口简单随笔
  15. 数值分析及其matlab实现习题答案,数值分析练习题(含答案).doc
  16. Web前端农历/阴历转换
  17. GPS 入门 7 —— GPS定位、LSB基站定位、wifi定位区别
  18. oppo禁用android系统通知栏,状态栏设置OPPO版
  19. html5饼图颜色渐变,Highcharts 渐变饼图
  20. 李沐老师 d2l库画图在 pycharm 动态显示问题(已解决)

热门文章

  1. adb server is out of date. linux,adb server is out of date. killing完美解决
  2. 我的世界服务器防挂系统,[管理|机制]AFKKicker —— 防挂机!定时要求输入验证码 防止挂机[1.7.10-1.12.2]...
  3. 分压式静态工作点稳定电路
  4. 华为防火墙查看日志命令_华为防火墙异常日志,请高手进来查看,跪谢
  5. 又一门国产数据库语言诞生了,比SQL还好用
  6. python输出国际象棋棋盘_python输出国际象棋棋盘的实例分享
  7. 使用Predicate操作Collection集合
  8. Jsoup使用选择器语法来查找元素
  9. shell脚本给mysql创建表_shell脚本:实现MySQL创建数据库和删除数据库的脚本
  10. tomcat 参数最佳实践_一线架构师开发总结:剖析并发编程+JVM性能,深入Tomcat与MySQL...