谈谈C++中的数组

      虽然C++对数组类型提供了内置支持,但是这种支持仅限于用来读写单个元素的机
制。C++不支持数组的抽象abstraction ,也不支持对整个数组的操作。我们有时会希望对
整个数组进行操作,例如:把一个数组赋值给另外一个数组,对两个数组进行相等比较或
者想知道数组的大小size。 例如:给出两个数组我们不能用赋值操作符把一个数组拷
贝到另一个中去


int array0[ 10 ], array1[ 10 ];
// 错误,不能直接把一个数组赋值给另一个数组
array0 = array1;


      如果我们希望把一个数组赋值给另外一个,则必须自己写程序按顺序拷贝每个元素


for ( int index = 0; index < 10; ++index )
array0[ index ] = array1[ index ];


      而且数组类型本身没有自我意识,它不知道自己的长度我们必须另外记录数组本身
的这些信息。当我们希望把数组作为一个参数传递给一个函数的时候,问题就出现了,在C++
中数组不同于整数类型和浮点数类型,它不是C++语言的一等first-class 公民。数组是
从C 语言中继承来的,它反映了数据与对其进行操作的算法的分离,而这正是过程化程序设
计的特征。

 

为什么内置数组类型不支持数组之间的赋值,支持这种操作需要什么信息?

      因为数组名代表常量指针,所以数组之间的赋值就是把一个常量付给另一个常量。

常量指针”不等同于“常量”,所以后半句显然是不准确的。

      C 数组在设计上采取了不保存数组的大小信息,这就导致了在运行时无法从数组对象上获取数组的大小;如果没有数组的大小信息,数组对象的值就无从获得、相应地数组的拷贝操作按照常规(即一般对象的赋值方式)也是不能完成的(这其实是 C 数组如此设计要达到的目的)。

      虽然数组对象是一个左值,但是由于缺乏数组对象的大小信息,所以在程序运行时无法获得这个对象的值,当然也就无法直接使用数组的值。然而,C 中的任何对象都是有值属性的,数组对象也应该不能例外——于是就有了这样一条规定:除了作为 sizeof 和 & 运算符的操作数之外,数组转换(转换是一种运算,由编译器自动进行)为指向数组第一个元素的指针,并且不再是一个左值。也就是说,一般情况下的数组代表的 是数组第一个元素的地址;其类型也发生了变化——不再是数组类型,而是指针类型。

 


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值