• C 二维数值指针访问


    目录

    基本说明

    二维数组指针去访问地址


    对于32位运行平台,指针地址占用4字节。就是说存放一个指针的地址需要用4字节存储。

    64位,指针地址占用8字节。

     注意:优先级问题,数组下标[]运算法 高于  指针*运算符


    以下测试针对32位处理器


    基本说明

    • 数组指针:变量是指针,一维 char (*p)[3] 、二维 char (*p)[2][3] ,长度固定是4字节
    • 指针数组:变量是数组,每个位置存放的是指针地址 一维 char *p[3] 、二维 char *p[2][3]  

    说白了就是存放指针的数组,还是数组

    1. char *p;
    2. printf("char *p => %d\r\n", sizeof(p));
    3. {
    4. char *p0[3];
    5. char *p1[2][3];
    6. printf("指针数组:\r\n");
    7. printf("char *p0[3] => %d\r\n", sizeof(p0));
    8. printf("char *p1[2][3] => %d\r\n", sizeof(p1));
    9. }
    10. {
    11. char(*p0)[3];
    12. char(*p1)[2][3];
    13. printf("数组指针:\r\n");
    14. printf("char (*p0)[3] => %d\r\n", sizeof(p0));
    15. printf("char (*p1)[2][3] => %d\r\n", sizeof(p1));
    16. }

    输出结果: 

    1. char *p => 4
    2. 指针数组:
    3. char *p0[3] => 12
    4. char *p1[2][3] => 24
    5. 数组指针:
    6. char (*p0)[3] => 4
    7. char (*p1)[2][3] => 4

    二维数组指针去访问地址

    1. int arr[2][3] = { 1, 2, 3, 4, 5, 6 };
    2. int(*p)[2][3] = arr;//或者 int(*p)[2][3] = &arr;
    3. printf("%d\r\n", (*p)[0][2]);//指针访问
    4. printf("%d\r\n", p[0][0][2]);//数组下标访问

    此时p是一个指针,它只需要开辟4字节的空间用来存放地址。访问地址的方式有指针操作符号*,也可以通过数组下表访问。

    p[0][0][2]貌似是3维度数组,其实可理解为三维数组的索引维0的数组,

    1. int arr[] = {
    2. 1, 2, 3,
    3. 4, 5, 6,
    4. 7, 8, 9,
    5. 10, 11, 12 };
    6. int(*p)[2][3] = (int(*)[2][3])arr;
    7. printf("%d\r\n", (*p)[0][2]); // => 3
    8. printf("%d\r\n", p[0][0][2]); // => 3
    9. printf("%d\r\n", p[1][0][0]); // => 7
    10. int(*px)[3] = (int(*)[3])arr;
    11. printf("%d %d\r\n", (*px)[0],px[0][0] ); // => 1 1
    12. printf("%d %d\r\n", (*(px+1))[2],px[1][2]);// => 6 6

     p[1][0][0] 结果是7,调到了下一个二维数组的开始位置。

    总结,

            数组指针只是定义了程序的下标索引格式、偏移量等等。就是告诉程序要怎么去读取一个地址段空间里的数据。

  • 相关阅读:
    【CVPR2022】NFormer: Robust Person Re-identification with Neighbor Transformer
    ElastaticSearch ---es客户端 TransportClient
    【Blender】Blender入门学习
    神经元的结构模型图片,神经元模型图片解析
    python 66 个冷知识 0714
    如何让git命令仅针对当前目录
    中移链共识机制介绍
    SQL Delete 语句(删除表中的记录)
    Docker 搭建 Nexus3 私服 | 基本操作
    CentOSPython使用openpyxl、pandas读取excel报错
  • 原文地址:https://blog.csdn.net/ai5945fei/article/details/127960635