二十六、数组、指针和字符串:数组的存储与初始化、对象数组、数组作为函数参数

一、数组的存储
	数组在内存中连续存储,数组名则为数组所占内存的首地址。
多维数组的存储,这里以二维数组 int a[2][3]为例
	左边为高位,右边为低位
	a[0][0] a[0][1]  a[0][2]
	a[1][0] a[1][1]  a[1][2]   //这种存储方式为行优先存储
 
二、数组的初始化
声明数组时对部分或全部元素赋值就是数组的初始化。
如简单数组类型的数组和对象数组,前者就是给相应数组元素赋值,后者则为调用对象的构造函数。
声明时为元素赋值,如:
int a[2]={1,2};
int a[]={1,2};  //都给出初始值时可以不说明元素个数
int a[3]={1,2}  //这种情况必须给出元素个数,a[2]没赋值的情况下默认为0
多维数组类似
int [2][2]={1,2,1,2}
int [][2]={1,2,1,2}  //与上面等价
int [2][2]={{1,2},{1,2}}  //等价,这样显示更为直观

三、对象数组
当数组元素是某个类的对象时此数组就是对象数组。
初始化时需要调用每个对象的构造函数。
如:
A b[2]={A(2,3)};
//b[0]显示指定初始值,则调用带形参的构造函数
//b[1]示显示指定,调用默认构造函数
四、数组作为函数参数
数组元素作为函数参数时,实参和形参都须是数组名且类型要一样。此时传递的是数组的首地址,后面元素根据内存地址进行对应。
如果在函数内对数组元素值进行改变,则主调函数中实参数组的相应元素值也会改变。
主调函数中的实参数组也相应改变,那传数组是传值还是传引用?
实际是如果形参是数组,实际作用相当于“传引用了”。
因为形参如果是数组的形式,则并非传数组的值,而是传指针的值(首地址)。所传的并非数组的内容,而是指向数组首元素的指针。
如void fun(int& a[]);  //这样会报错,arrays of references are illegal
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值