您的位置:首页 > 其它

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

2015-04-26 14:46 776 查看
一、数组的存储
数组在内存中连续存储,数组名则为数组所占内存的首地址。
多维数组的存储,这里以二维数组 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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐