C++Primer--数组、指针

本文详细介绍了数组的定义、初始化及特殊性质,并深入探讨了数组与指针的关系,包括指针数组、数组指针和数组引用的区别。同时,还讲解了如何使用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相邻,可以随便进行调换,意义是一样的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值