码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 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,调到了下一个二维数组的开始位置。

    总结,

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

  • 相关阅读:
    算法----二维区域和检索 - 矩阵不可变(Kotlin)
    golang中的iota
    微信小程序有的机型无法播放m3u8格式的直播流,使用H5在微信环境里播放
    CSP登机牌条码202112-3
    ubuntu(23):ubuntu系统具有两个“系统盘”的说明:一个盘为系统盘,另一个为被系统文件占用的数据盘--可以格式化并重新分配卷类型和卷名称
    03.Eureka集群配置
    防火墙的策略路由PBR
    iSCSI:提供基于 iSCSI 的网络存储(服务端以及启动器配置)
    【Java基础知识 23】缓冲区数据结构bytebuffer
    云盒子联合深信服,为南京一中打造智慧双模教学资源分享平台
  • 原文地址:https://blog.csdn.net/ai5945fei/article/details/127960635
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号