zoukankan      html  css  js  c++  java
  • C语言指针和数组知识总结(下)

    一、数组指针:
    数组指针就是一个指针,只不过它指向的是一个数组.可以通过如下方式来定义


    typedef int Array[5]; //数组类型
    Array* m;      //数组定义
    还有一种更为简洁的写法:
    int (*m)[10];




    二、指针数组:
    所谓的指针数组就是一个数组,只不过数组元素是指针,可以通过如下方式来定义


    int* m[10];


    三、数组指针的实例

    #include <stdio.h>
    
    
    int main()
    {
      int a[5] = {1,2,3,4,5};
      typedef int(IArray5)[5];
      IArray5* n = &a; 
      int (*m)[5] = &a;
    
    
      for(i = 0; i < 5;i ++)
      {
        printf("%d 
    ",a[i]);
      }
      
      for(i = 0; i < 5;i ++)
      {
        printf("%d 
    ",(*m)[i]);
      }
      for(i = 0; i < 5;i ++)
      {
        printf("%d 
    ",(*n)[i]);
      }  
    
    
    }

    分析打印结果如下





    四、所谓二维数组


    1.C语言中不存在所谓的二维或者更高维次的数组,因为在内存中都是线性分布的,所以都是一维数组.
    二位数组的数组名代表的就是一个数组指针,只不过这个指针指向的是一个数组.
    2.二维数组的一个实例

    #include <stdio.h>
    
    
    int main()
    {
      int array[5][5] = {
      	11,12,13,14,15,
      	16,17,18,19,20,
      	21,22,23,24,25,
      	26,27,28,29,30,
      	31,32,33,34,35
      	};
      
      int* p1 = (int*)(&array + 1);
      int* p2 = (int*)(*(array + 1) + 6);
      
      printf("result = %d, %d, %d, %d ,%d  
    ",(*(*array)),(*(*array) + 4),(*(*(array + 4))),p1[-4],p2[-1]);
    	
    }





    仔细分析如下:


    按照前面所述,二维数组数组名为一个数组指针,那么可以把这个数组名array看做成一维数组里面的数组名即可,那么我们就可以确定

    array + 1 表示的就是array[1]这个数组,同时类比一维数组,那么&array表示的就是取这个数组的地址,那么我们可以画出如下的示意图


    经过上面的示意图,就可以得出如下的打印结果如下



  • 相关阅读:
    Java 面向对象(十二)类的成员 之 代码块
    Java 关键字:static
    Java 常用类(二):包装类(Wrapper)
    Java 之 clone 方法(对象拷贝)
    SQL分组聚合查询
    Rabbitmq消息持久化
    idea 插件
    TCP粘包,拆包及解决方法
    redis内存淘汰策略及如何配置
    MySQL存储过程/存储过程与自定义函数的区别
  • 原文地址:https://www.cnblogs.com/keanuyaoo/p/3317804.html
Copyright © 2011-2022 走看看