美文网首页互联网科技Linux我用 Linux
小朋友学C++(45):指针与数组的关系

小朋友学C++(45):指针与数组的关系

作者: 海天一树X | 来源:发表于2019-01-24 22:35 被阅读3次

数组名称实际上相当于一个指针,指向数组第一个元素所在的地址。

例1 用指针方式输入输出数组元素

#include <iostream>
using namespace std;

int main()
{
    int n;
    cin >> n;
    int a[n];
    for(int i = 0; i < n; i++)
    {
        // 挨个赋值
        // p + i表示指针的位置挪动了i * sizeof(int)个内存地址,即指向了第i个元素
        cin >> *(a + i) ;
    }

    for(int i = 0; i < n; i++)
    {
        cout << *(a + i) << endl;
    }

    return 0;
}

运行结果:

3
10 20 30
10
20
30

分析:
在这个例子里,a既是数组名称,也代表指向第一个元素的指针。
a + 0 = a表示第一个元素a[0]的地址,a + 1表示第二个元素a[1]所在的地址。a + 2表示第三个元素a[2]的地址。
(a + 0) = a[0],(a + 1) = a[1],*(a + 2) = a[2]。
注意,这里a + 1不是表示a的地址直接加1,而是表示下一个元素的地址,即a指向的地址 + 1 * sizeof(元素类型)。
假设a[0]的地址为0x00000020,则
a = 0x00000020;
a + 1 = 0x00000020 + 1 * 4 = 0x00000024;
a + 2 = 0x00000020 + 2 * 4 = 0x00000028。
这里之所以要乘以4,是因为每个整型数据占4个字节的内存。如果是字符型数组,那么应该乘以1,如果是double型数组,那么应该乘以8。

例2:动态申请内存

#include <iostream>
using namespace std;

int main()
{
    int n;
    cin >> n;
    int *a = new int[n]; // 用new动态申请内存
    for(int i = 0; i < n; i++)
    {
        cin >> *(a + i);
    }

    for(int i = 0; i < n; i++)
    {
        cout << *(a + i) << endl;
    }

    delete a;           // 释放内存

    return 0;
}

运行结果:

3
10 20 30
10
20
30

分析:
这里使用了new来申请内存,delete来释放内存。这是动态申请内存的方式。而int a[3];则是静态申请内存的方式。
动态申请内存的方式,当你使用delete释放后,这块内存就可以另做它用了。而静态申请的内存,若是为局部变量申请的内存,则等当前函数执行完后,内被释放;若是为全局变量申请的内存,则等整个程序运行结束后,内存才会被释放。
所谓“动态”,就是“随时申请,随时释放”的意思。
C++用new/delete来动态申请/释放内存,C语言则用malloc()/free()来动态申请/释放内存。

少儿编程答疑、算法答疑请加微信307591841或QQ307591841


诺依曼算法公众号.jpg

相关文章

  • 小朋友学C++(45):指针与数组的关系

    数组名称实际上相当于一个指针,指向数组第一个元素所在的地址。 例1 用指针方式输入输出数组元素 运行结果: 分析...

  • C语言的指针与数组(进阶篇之一)

    一、一维数组与指针 (1).数组指针在C语言中,数组的首地址称为数组指针。而C++规定,数组的首地址可用数组名a表...

  • 学习笔记3(指针运算,函数参数与指针,数组指针,二级指针)

    一、指针运算 二、数组与指针 三、指针和函数参数 java中: C/C++中: 四、指针数组 五、 二级指针 六、...

  • 指针数组和数组指针

    指针数组|存储指针的数组 在C语言和C++语言中,数组元素全为指针的数组称为指针数组。 例如:int *p[10]...

  • 指针与数组

    指针与数组 指针数组,数组指针,指针法访问数组,分不清如何使用,下面将帮你疏通思路,更好理解他们的关系。 数组名的...

  • 笔记八

    二维数组指针:一定要知道指针的指向!!即指针指向哪里。指针的运算:注意移动字节数问题。指针与数组的关系:指针数组:...

  • 计算机基础的考察

    语言语法(以C/C++为例)。 指针(数组),函数指针,操作符运算顺序,const(常指针与指向常量指针),sta...

  • 12.16学习总结

    二维数组指针:一定要知道指针的指向指针的运算:注意移动字节数的问题指针与数组的关系指针数组:int pb[4];数...

  • 2019-05-22 常量与指针,数组与指针

    常量与指针,数组与指针 常量与指针 常量与指针的关系很容易弄混,为此我专门在此记录一下。 常量指针 指向常量的指针...

  • C语言的数组指针与指针数组(One)

    一、数组指针与指针数组: 数组指针<——>本质是指针 指针数组<——>本质是数组上图: 二、数组指针: int ...

网友评论

    本文标题:小朋友学C++(45):指针与数组的关系

    本文链接:https://www.haomeiwen.com/subject/mnhpjqtx.html