栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++数组(以指针和内存空间角度去解析)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++数组(以指针和内存空间角度去解析)

目录

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.思考:数组的类型是什么?

    

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/779758.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号