目录
1.证明:数组在内存空间中是连续存放的
2.数组名和数组的首元素的地址之间的异同点(非常重要)
3.思考:数组的类型是什么?
C++中定义数组: type name[n] 或 type *name=new type[n]
注:第一种方式定义数组(红色部分的n) 不能为变量,只能为常数。有些编译器不支持这种写法。
数组:一组相同数据类型的对象的集合,可以认为是有序表,数组在内存空间中是连续存放的,其最重要的两个参数(数据类型,元素个数)。
1.证明:数组在内存空间中是连续存放的
#include
using namespace std;
int main()
{
//定义一个int的类型的数组,其元素个数为20个.
int a[20];
cout << "打印整个数组的大小sizeof(a)= " << sizeof(a) << endl;
//遍历这个数组,并输出每一个元素的地址
for (int i = 0; i < 20; i++)
{
cout << "数组中第" << i << "个元素的地址: " <<&a[i]<
第0个元素的地址和第1个元素的地址正好相差一个sizeof(int)=4个字节的大小。
2.数组名和数组的首元素的地址之间的异同点(非常重要)
上图例子我们知道sizeof(数组名)返回的是整个数组的大小。
相同点:数组名和数组的首元素的地址是相等的。这个家人们想必应该都知道的。
不同点:步长不相等。
1.数组名a:
a代表这个地址数值,它相当于一个指针,指向第一个元素(&a[0]),即指向数组的首地址。数组中的其他元素可以通过a的位移得到,即a+i = &a[i] 。
2.数组名取地址&a:
对于一个普通的变量b,&b是指用取地址符号取得变量b的存放地址;a在内存中没有分配空间,只对数组a的各个元素分配了存储空间,此处数组名字a显然不是普通的变量,&a也不代表所取a的存储地址。
&a在数值上等于&a[0],也等于a。此时,&a数值上等于整个数组的起始位置地址,含义上代表整个数组所占内存的大小,因为它的进阶单位是整个数组的字节长度,&a + 1 等于的是数组结束之后的下一段的起始位置地址。
3.数组首地址&a[0]:
a[0]在内存中实际分类存储空间,而&a[0]就是取该存储空间的地址,这与对于任意满足范围的i,&a[i]就是取第i个元素的存储地址一样。
3.思考:数组的类型是什么?
第0个元素的地址和第1个元素的地址正好相差一个sizeof(int)=4个字节的大小。
2.数组名和数组的首元素的地址之间的异同点(非常重要)
上图例子我们知道sizeof(数组名)返回的是整个数组的大小。
相同点:数组名和数组的首元素的地址是相等的。这个家人们想必应该都知道的。
不同点:步长不相等。
1.数组名a:
a代表这个地址数值,它相当于一个指针,指向第一个元素(&a[0]),即指向数组的首地址。数组中的其他元素可以通过a的位移得到,即a+i = &a[i] 。
2.数组名取地址&a:
对于一个普通的变量b,&b是指用取地址符号取得变量b的存放地址;a在内存中没有分配空间,只对数组a的各个元素分配了存储空间,此处数组名字a显然不是普通的变量,&a也不代表所取a的存储地址。
&a在数值上等于&a[0],也等于a。此时,&a数值上等于整个数组的起始位置地址,含义上代表整个数组所占内存的大小,因为它的进阶单位是整个数组的字节长度,&a + 1 等于的是数组结束之后的下一段的起始位置地址。
3.数组首地址&a[0]:
a[0]在内存中实际分类存储空间,而&a[0]就是取该存储空间的地址,这与对于任意满足范围的i,&a[i]就是取第i个元素的存储地址一样。
3.思考:数组的类型是什么?



