• 数组

    • 数组的定义和初始化
    • 字符数组的特殊性
    • 不允许拷贝和赋值
    • 数组的指针和数组的引用
  • 指针和数组
    • 使用auto关键字和decltype关键字时的不同
  • 指针常量和常量指针
    • 指针常量
    • 常量指针

数组

定义数组时必须指定数组类型,不允许用auto关键字由初始值的列表推断类型,另外和vector一样,数组元素应为对象,因此不存在引用的数组。

数组的定义和初始化

行如a[d],a是数组名字,d是维度,对维度的要求如下:

  • 1 维度表示数组的元素个数,必须大于0
  • 2 维度是属于数组类型的一部分,因此在编译是必须是已知的,必须是一个常量表达式。

字符数组的特殊性

对字符串字面值对数组初始化。当使用这种方式时,一定要注意字符串字面值的结尾处还有一个空字符,这个空字符也像字符串其他字符一样被拷贝到字符数组中。

不允许拷贝和赋值

不能将数组内容拷贝给其它数组作为初始值,也不能用数组为其它数组赋值。

数组的指针和数组的引用

从内向外,从右向左读

Int *ptrs[10];           //ptrs是含有10个整型数组的指针  (指针数组)
Int  &refs[10] = ….;     //错误,不存在引用的数组
Int (*Parry)[10] = &arr; //Parry指向一个含有10个整数的数组  (数组指针)
Int (&arrRef)[10] = arr  //arrRef引用一个含有10个整数的数组  (数组引用)

()当需要遍历数组的所有元素时,最好的办法也是使用范围for语句。


指针和数组

数组有个特性,在很多用到数组名字的地方,编译器会自动将其替换为一个指向数组首元素的指针。

使用auto关键字和decltype关键字时的不同

int ia[] = {0,1,2,3,4,5,6,7,8,9};
auto ia2(ia) ; //ia2是一个整型指针,指向ia的第一个元素decltype(ia) ia3 = {0,1,2,3,4,5,6,7,8,9};  //decltype(ia)返回类型是10个整数组成的数组
ia3[4]  = i ;  //把i的值赋给ia3的一个元素。

指针也是迭代器:使用下标运算符索引一个数组尾元素的下一位置

使用范围for语句处理多维数组,除了最内层的循环外,其他所有循环的控制变量都应该是引用类型。

允许使用数组初始化vector对象,只需指明拷贝区域的首元素地址和尾后地址就行。
俩个vector对象的比较 直接比较v1==v2


指针常量和常量指针

牢记const只对它左边的内容起作用,唯一的例外就是const本身是最左边的修饰符,那么它才会对右边的东西起作用。

指针常量

int * const a; //表示指针a是一个常量,初始化后不可更改,永远指向某个对象,但指向对象的值可以修改。

常量指针

const int * a;(等同于int const* a) //表示指针a所指的对象是常量,其值不可修改,但是指针a可以指向其它对象。
只要int 和 const相邻,可以随便进行调换,意义是一样的。

C++Primer--数组、指针相关推荐

  1. 【共读Primer】52.[6.3]返回类型和return语句--返回数组指针 Page205

    数组不能被拷贝,所以返回值不能是数组类型. 但是我们可以使用返回指针的方式来实现返回数组的目的 声明一个返回数组指针的函数 int (*fun(int i))[10]; // func(int i) ...

  2. 关于“数组指针”的一点想法

    刚刚看<c++ primer plus>,里面讲到如果定义一个数组,int m[10]; 则"m"和"&m"的值是一样的,但是,本质不同,数 ...

  3. 指针数组,数组指针与二维数组剖析

    int *p[3]与int (*p)[3]的区别 *p[3]这个是一个指针数组,它所代表的意思是数组中的每一个元素都是一个指针变量,而(*p)[3],p是一个指针变量,表示指向一个含有3个整型元素的一 ...

  4. C++ 笔记(27)— 指针变量、数组和指针、指针数组、数组指针、指针常量与常量指针

    1. 什么是指针变量? 指针变量是专门有一个变量来存放指针. int main(int argc, char *argv[]) {int a = 10;int *p = &a; //通过取地址 ...

  5. 关于C语言中的数组指针、指针数组以及二级指针

    概念解释 数组指针:首先它是一个指针,它指向一个数组,即指向数组的指针:在32 位系统下永远是占4 个字节,至于它指向的数组占多少字节,不知道.数组指针指向的是数组中的一个具体元素,而不是整个数组,所 ...

  6. 【C语言】数组指针与指针数组的区分与应用

    这里以一道C语言题--输出矩阵两个对角线上的数(二维数组)为例 7-57 输出矩阵两个对角线上的数(二维数组) (6 分) 编写程序,将数据输入一个n * n二维数组中,输出矩阵两个对角线上的数.假设 ...

  7. C++ 笔记(14)— 指针(指针声明、取地址、取值、new/delete、NULL指针、指针运算、指针数组、数组指针、指针传递给函数、从函数返回指针)

    1. 声明指针 指针是一个变量,其值为另一个变量的地址,即,内存位置的直接地址.就像其他变量或常量一样,您必须在使用指 针存储其他变量地址之前,对其进行声明. 指针变量声明的一般形式为: type * ...

  8. C++二维数组名与数组指针的思考

    二维数组名和数组指针可以当做一个东西用,但两者之间的含义是不同的. 二维数组名是一个指向数组中所有元素的指针,而数组指针是一个行指针.体现在sizeof()上的不同. #include <ios ...

  9. C指针4:数组指针(指向数组的指针)

    先明确两个概念:(1和2是两个完全不一样的东西) 1.数组指针:如果一个指针指向了数组(该数组就是普通定义的数组),我们就称它为数组指针(Array Pointer).(1强调的是指针) 2.指针数组 ...

  10. C语言指针数组与数组指针的区别

    C语言指针数组与数组指针的区别 首先,顾名思义 数组指针是一个指针,是指向一个数组的指针,如 int (a*)[5]:这就是一个指向含有5个元素的数组的指针 指针数组是一个数组,它包含的元素全是指针变 ...

最新文章

  1. 安全框架 - Shiro与springMVC整合的注解以及JSP标签
  2. 修改Docker容器字符编码为-zh_CN.UTF-8中文字符集
  3. 【Socket网络编程】5.单播、多播(组播)、广播
  4. linux信号以及core
  5. java中launch方法,Java AppUtils.launchApp方法代码示例
  6. JqueryCookie
  7. 神秘的 shadow-dom 浅析
  8. 微信HOOK 关于转发消息功能开发的一些开发心得
  9. 是时候激活你的批判性思维了
  10. 计算机共享w7系统文件共享,win7系统怎么共享文件 电脑一键共享文件方法教程...
  11. 批处理命令%~dp0详解
  12. Vue router 默认加载 views 文件夹下全部vue文件
  13. php deprecated,PHP Deprecated: Function eregi() is deprecated解决方法
  14. USYD悉尼大学INFO1110 详细作业解析Week4 revision(未更新完)
  15. Iphone保存html网页,在iPhone上保存网页的最优方式
  16. 三菱FX3U PLC 位置式PID算法(ST语言)
  17. svn分支开发与主干合并(branch merge)
  18. 我也玩单片机:流水灯
  19. 百汇BCR:什么是外汇交易风险?如何尽量减少风险影响?
  20. dapper mysql_.NET Core Dapper操作mysql数据库

热门文章

  1. 【Java基础系列】6- 选择结构与分支结构
  2. mysql中的参照完整性
  3. Oracle数据库连接
  4. 为什么中年男人爱出轨?
  5. 如何解决局域网内的电脑IP冲突问题(转)
  6. 统计知识5:总平方和、残差平方和、判定系数
  7. sklearn的简介
  8. Ekko也想是产品经理(1)
  9. 无需第三方软件,巧用系统自带功能开启共享WIFI
  10. Python数据库操作Orator-orm