zoukankan      html  css  js  c++  java
  • C语言基础:C语言指针(5)

    上一节, 我们补充了一点关于指针的小知识, 这次我们来讲讲指针和数组:


    首先, 我们来看一个小例子:

    #include <stdio.h>
    
    int main()
    {
        int ages[5] = {10, 20, 30, 40 ,50};
        
        int *p;
        
        p = &ages[0];
        
        printf("p = %d
    ", *p);
        
        return 0;
    }

    输出的结果:



    有些人看到后, 知道是可以这样子传值, 但如果我们把整个数组的所有元素打印出来呢? 我们应该怎么做? 内存中又是怎样存的? 下面我们来看看一个例子:

    #include <stdio.h>
    
    int main()
    {
        int ages[5] = {10, 20, 30, 40 ,50};
        
        int *p;
        
        p = &ages[0];
        
        for (int i = 0; i < 5; i++)
        {
            printf("p = %d
    ", p[i]);
        }
        return 0;
    }

    输出的结果:



    没错, 按照上面的例子, 我们知道是可以这样子输出数组里所有的元素, 那么为什么这样子做是可行的呢? 下面我看看关于内存的示意图:



    看完示意图之后, 我们来解释一下:

    当p = &ages[0]的时候, p的地址就是数组ages第0个元素的地址, 也就是说p其实就是数组元素, 切记不是指向数组, 所以当我们更改p的元素的时候, 也就是说更改数组ages的元素, 所以也就是我们所输出的结果, 当然还有其他办法更换, 比如下面这个例子:

    #include <stdio.h>
    
    int main()
    {
        int ages[5] = {10, 20, 30, 40 ,50};
        
        int *p;
        
        p = &ages[0];
        
        p += 1;
        
        printf("p = %d
    ", *p);
        
        return 0;
    }

    解释一下p += 1, 其实这句代码就是更改地址:

    由前面一句p = &ages[0] 的时候, 我们就知道p所存的地址就是第0个元素的地址, 一旦该地址+1, 也就是第1个元素的地址, 但地址加多少, 这个取决于指针的类型,比如int * 4, double * 8 以此类推, 所以我们也可以实现这样子去改变p的值, 当然你也可以写一个函数去实现更改地址, 比如下面这个例子:

    #include <stdio.h>
    
    void change(int *array);
    
    int main()
    {
        int ages[5] = {10, 20, 30, 40 ,50};
    
        change(ages);
        
        return 0;
    }
    
    void change(int *array)
    {
        printf("%d
    ", array[2]);
    }


    好了, 这次我们就讲到这里, 还有更多的方式大家可以慢慢去尝试, 下次我们继续~

  • 相关阅读:
    linux下的watch命令
    Erlang运行时的错误
    Redis查看帮助文档
    PO Box简介
    用erlang写的kmp算法
    laravel全过程
    artdialog 弹出框
    支持触屏版的旋转幻灯片
    android生成APP的名字,图标,开机动画
    使用Eclipse构建app网站应用
  • 原文地址:https://www.cnblogs.com/iOSCain/p/4282890.html
Copyright © 2011-2022 走看看