声明时,下标优先级[]
大于指针*
。所以在声明一个指针指向一个数组时,应该加上小括号表明其指针属性。
内置数组是在连续空间中,存放同类对象的的一种数据结构,与std::vector的区别在于其灵活性,前者大小固定灵活性差,但是效率略高,后者大小动态调整,有对应的方法。
相同之处在于:
- 都存放着同类对象
- 每个成员都是无名的
- 可以通过下标访问
因为数组本身是对象,因此可以定义数组的引用、数组的指针,该如何正确理解复杂的数组类型?
int *ptrs[10];//存放着10个int *的数组
int &ref[10]=/* ?*/;//不存在,因为10个int &数组要求元素占有空间
int (*Parray)[10]=&arr;//指向10个int的数组的指针
int (&arrRef)[10]=arr;//指向10个int的数组的引用
int * (&arry)[10]=ptrs;//10个int *的数组的引用
书中介绍了一种理解复杂指针声明的方法,从内到外,从右往左依次解释。从内到外指的是从小括号内部开始到外部,从右往左,从声明的右边开始,如int * (&arry)[10]=ptrs;
从内往外,首先他是一个引用,从右往左,引用类型是大小为10的数组,数组的内容是int *
。
- 列表初始化只能用在初始化
- 重新赋值请使用memset或者循环
- std::array 允许列表初始化重新赋值
- 作为函数参数只能是指针,长度信息可能需要额外参数(除非你处理上非常小心)
一维数组初始化、赋值和std::array解决的问题:
/****************一维数组************************/
//初始化
char ch[3] = { '1','2','3' };//char ch[3] { '1','2','3' } 元素间用逗号隔开,缺失部分用0补
//一个指针来读写这个数组
char* pChar = ch;//char * pChar=&ch[0]等价的
//一个只读指针来读这个数组
const char* pConstChar = ch;
//重新赋值
ch[0] = '4';
ch[1] = '5';
ch[2] = '6';
//如果是相同的值,可以用循环
for (int i = 0; i
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?