一、数组的存储 数组在内存中连续存储,数组名则为数组所占内存的首地址。 多维数组的存储,这里以二维数组 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
二十六、数组、指针和字符串:数组的存储与初始化、对象数组、数组作为函数参数
最新推荐文章于 2024-05-17 22:43:29 发布