编译器会把数组名转换为一个指针常量,是数组中的第一个元素的地址,类型就是数组元素的地址类型,如:

int a[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };

数组名a若出现在表达式中,如int *p=a;那么它就转换为第一个元素的地址,等价于int *p=&a[0];

只有两种情况下例外:

第一种是对数组名使用sizeof运算符

sizeof(a) :这将会得到整个数组所占的内存大小,a是长度为10个int(4字节)数组,运算结果是40。此时a代表的是数组所占用的那一整块内存。

第二种是对数组名取地址

&a:运算结果是数组的地址。

a 和 &a

虽然a 和 &a 的值是相同的。 
但是&a 中的a代表整个数组,而不是指向数组首元素的指针常量。 
“取一个数组名的地址所产生的是一个指向数组的指针,而不是一个指向某个指针常量值的指针。

所以 a+1  和 &a +1 不是同一个意义。 a+1  表示下一个元素,&a +1 表示下一个数组。

数组作为函数参数

数组传参时,会退化为指针。 类型是第一个元素的地址类型。
(1)退化的意义:C语言只会以值拷贝的方式传递参数,参数传递时,如果只拷贝整个数组,效率会大大降低,并且在参数位于栈上,太大的数组拷贝将会导致栈溢出。 
(2)因此,C语言将数组的传参进行了退化。将整个数组拷贝一份传入函数时,将数组名看做常量指针,传数组首元素的地址。

数组不能自增、自减运算。而指针可以。

二维数组和函数

二维数组作为函数的参数,

如int a[3][4] = {(1,1,1,1),(2,2,2,2),(3,3,3,3),};

sum(a,3);

关键是sum申明的原型

sum(int (ar*)[4],int size);  // int (ar*)[4]表示的是数组指针

或者是 sum(int ar[][4],int size);

数组初始化规则

1.只有定义数组时才能使用初始化化,不能将一个数组赋给另一个数组。

只提供一个用逗号分隔的值列表,并将它们用花括号括起来。初始化的值的数量可以少于数组的元素数目,其他的默认设置为0.

c++ primer plus 复合类型之数组相关推荐

  1. C++ Primer Plus 学习笔记(第 4 章 复合类型)

    C++ Primer Plus 学习笔记 第 4 章 复合类型 数组 数组(array)是一种数据格式,能够存储多个同类型的值. 要创建数组,可使用声明语句.数组声明应指出以下三点: 存储在每个元素的 ...

  2. 【C++ Primer Plus】第4章 复合类型

    目录 [数组] [C- 字符串] 字符串的输入 字符串拼接 字符串常用函数 [数组长度] [string类] 原始字符串 [struct 结构简介] [枚举] [指针和自由存储空间] 使用new分配内 ...

  3. 简要说明php数组的类型,php数组的概述及分类与声明代码演示

    /** ** 一数组的概述 1.数组的本质:管理和操作一组变量,成批处理 2.数组是复合类型 3.数组中可以存储任意长度的数据.也可以存储任意类型的数据 4.数组就可以完成其他语言数据结构的功能(链表 ...

  4. 10,数据类型 ,复合类型 ,array ,map , struct

    一 ,数据类型 : 1 ,数字型 : tinyint ( -127,128 ) :1 个字节 smallint ( -32768,32767 ) :2 个字节 int ( -21亿,21亿 ) :4 ...

  5. winform point数组带数值_带你学够浪:Go语言基础系列 - 8分钟学复合类型

    对于一般的语言使用者来说 ,20% 的语言特性就能够满足 80% 的使用需求,剩下在使用中掌握.基于这一理论,Go 基础系列的文章不会刻意追求面面俱到,但该有知识点都会覆盖,目的是带你快跑赶上 Gol ...

  6. C++Primer Plus (第六版)阅读笔记 + 源码分析【第四章:复合类型】

    第四章:复合类型 数组 第四章:复合类型 复合类型组成: 基本整型. 浮点类型. 数组:存储多个同类型的值.(一组特殊的数组可以存储字符串.) 结构体:存储多个不同类型的值. 指针:将数据所处位置告诉 ...

  7. c++primer plus 6 读书笔记 第四章 复合类型

    目录 第4章复合类型 4.1 数组 4.1.1 4.1.2 数组的初始化规则 4.1.3C ++数组初始化方法使用{} 赋值,禁止缩窄转换. 4.2 字符串 4.2.1 拼接字符串常量 4.2.2 在 ...

  8. WebService大讲堂之Axis2(2):复合类型数据的传递

    在实际的应用中,不仅需要使用WebService 来传递简单类型的数据,有时也需要传递更复杂的数据,这些数据可以被称为复合类型的数据.数组与类(接口)是比较常用的复合类型.在Axis2 中可以直接使用 ...

  9. mysql的复合类型_PLSQL 复合类型数据

    •复合类型是用户定义的 常用的复合类型有:属性 记录 表 数组 (1) 属性类型(引用数据库列的数据类型) %TYPE – 引用变量和数据库列的数据类型 如:empcode emp.empno%typ ...

  10. 黑马程序员C语言基础(第八天)复合类型(自定义类型)(结构体)、共用体(联合体)、枚举enum、 typedef

    黑马程序员C语言基础(第一天) 黑马程序员C语言基础(第二天) 黑马程序员C语言基础(第三天) 黑马程序员C语言基础(第四天)数据类型 黑马程序员C语言基础(第五天)运算符与表达式.程序流程结构.数组 ...

最新文章

  1. Hbase与hive整合
  2. oracle递归查询子节点
  3. 多种分布式文件系统简介
  4. DPKG命令与软件安装、APT
  5. 空格的ascii码_美国信息交换标准代码ASCII
  6. 迈入JavaWeb第一步,Java网络编程基础,TCP网络编程URL网络编程等
  7. 写个随笔解解闷-书签漫游
  8. en60204标准_工业机械一般办理CE认证的标准
  9. Ubuntu下好的PDF阅读器介绍
  10. android aes256加密算法,Android中AES256加密的实现
  11. Math详解大全,数学类
  12. 经典c语言基础代码大全,经典基础实例编程C语言代码.doc
  13. 高质量解读《高性能mysql》——第1章 MySQL架构与历史
  14. SegNet 论文解析
  15. Lingo教育版免费申请流程
  16. 《吴忠与富平》之三:北地富平人物
  17. PHP调用芝麻商家平台(获取芝麻分)
  18. 【汇正财经】股票开盘价收盘价是什么?最高价和最低价呢?
  19. AS星尘(stardust)粒子系统 学习 3
  20. 揭个人信息黑产链条:含50多种交易大项 可私人定制

热门文章

  1. 包装模式就是这么简单啦
  2. 深度 | 无法找到“黑点”的代码,连顶级黑客也束手无策
  3. Debian系统apt-get build-dep命令
  4. c++中正则表达式(regex)
  5. Ubuntu 下为 Idea 创建启动图标.
  6. 6迁移-企业级 Hyper-v 群集部署实验方案
  7. python交互式程序设计导论第三周小测验答案,2020学堂云Python 交互式程序设计导论答案第五章节答案...
  8. go map二维数据追加
  9. HTML 区块、内联元素
  10. 2020全国计算机二级office大纲,2018-2020年(最新)全国计算机等级考试二级MS Office高级应用考试大纲...