您当前的位置: 首页 > 

我什么都布吉岛

暂无认证

  • 4浏览

    0关注

    292博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

数组与函数参数

我什么都布吉岛 发布时间:2021-06-24 17:14:29 ,浏览量:4

声明时,下标优先级[]大于指针*。所以在声明一个指针指向一个数组时,应该加上小括号表明其指针属性。

一、数组和std::vector区别

内置数组是在连续空间中,存放同类对象的的一种数据结构,与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 允许列表初始化重新赋值
  • 作为函数参数只能是指针,长度信息可能需要额外参数(除非你处理上非常小心)
3.1 一维数组与函数参数

一维数组初始化、赋值和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             
关注
打赏
1658157489
查看更多评论
0.2941s