• 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技术体系
    我的学习之旅
    Ubuntu18.04系统执行语句时出现错误Failed to load module "canberra-gtk-module"
    USRPX310 在GNU Radio上更改通道A或B
    ubuntu18.04 安装UHD+GNU Radio教程
    安装WIN10+Ubuntu18.04安装教程(实测有效)
    信道编码
    IQ基础
    清除LabVIEW中波形图表或波形图中的历史数据
    LabVIEW中的波形图表(Chart)与波形图(Graph)
  • 原文地址:https://www.cnblogs.com/keanuyaoo/p/3317804.html
Copyright © 2020-2023  润新知