• 首页
        • 更多产品

          客户为中心的产品管理工具

          专业的软件研发项目管理工具

          简单易用的团队知识库管理

          可量化的研发效能度量工具

          测试用例维护与计划执行

          以团队为中心的协作沟通

          研发工作流自动化工具

          账号认证与安全管理工具

          Why PingCode
          为什么选择 PingCode ?

          6000+企业信赖之选,为研发团队降本增效

        • 行业解决方案
          先进制造(即将上线)
        • 解决方案1
        • 解决方案2
  • Jira替代方案
目录

“指向二维数组内元素的指针”和“解引用数组的指针”有什么区别

“指向二维数组内元素的指针”和“解引用数组的指针”的区别是:C语言中的二维数组是按行排列的,也就是先存放 a[0] 行,再存放 a[1] 行,最后存放 a[2] 行;解引用执行顺序是:地址移动->解引用。

一、“指向二维数组内元素的指针”和“解引用数组的指针”的区别

C语言中的二维数组是按行排列的,也就是先存放 a[0] 行,再存放 a[1] 行,最后存放 a[2] 行;每行中的 4 个元素也是依次存放。数组 a 为 int 类型,每个元素占用 4 个字节,整个数组共占用 4×(3×4) = 48 个字节。
C语言允许把一个二维数组分解成多个一维数组来处理。对于数组 a,它可以分解成三个一维数组,即 a[0]、a[1]、a[2]。每一个一维数组又包含了 4 个元素,例如 a[0] 包含 a[0][0]、a[0][1]、a[0][2]、a[0][3]。

解引用执行顺序是:地址移动->解引用。

拿a[2][1]来说,一共有四步,其中包含了两次地址移动,两次解引用,执行顺序是:地址移动->解引用->地址移动->解引用(这里提一句,[]的结合性是左结合的,所以在移动的时候先移动行(名列前茅维)再移动列(第二维)

详细步骤:名列前茅步:在当前维度地址+2,因为a的维度是名列前茅维,所以是名列前茅维地址+2,即行+2

     第二步:解引用进入第二维度

     第三步:在当前维度地址+1,因为这时已经进入第二维,所以第二维地址+1,即列+1

     第四步:解引用得到元素的值  

延伸阅读:

二、一维数组中指针数组和数组指针的区别

指针数组:

1 int *p[5];

[]的优先级比*高,首先它是一个数组,它的大小是5,它里面存放的数据类型是int *,也就是整型指针。 所以它叫指针数组,讲到底这个p是一个数组,数组内的元素是5个指针,而数组内的每一个指针指向一个int型的变量

数组的指针:

int (*p)[5];

 首先p是一个指针,指向大小为5的数组,因此这叫数组的指针,定义了一个指向5个元素的一维数组的指针。(括号优先)

一站式研发项目管理平台 PingCode

一站式研发项目管理平台 PingCode

支持敏捷\瀑布、知识库、迭代计划&跟踪、需求、缺陷、测试管理,同时满足非研发团队的流程规划、项目管理和在线办公需要。

相关文章

脚本语言和使用JIT compilation的语言的主要区别是什么

百科

DX12中comptr对象中getaddressof与取地址运算符的区别

百科

易语言中的判断和如果命令有什么区别

百科

PHP if 语句判断时,变量在前跟变量在后有什么区别

百科

Static 变量放在函数内外,有什么区别

百科

怎么自定义Visual Studio代码折叠识别的区域

百科

python 利用可变参数传入list并打印,与直接用for循环打印有什么区别

百科

Java中的值传递和引用传递区别是什么

百科

lua编译器和lua解释器有什么区别

百科

函数直接返回和传递引用的区别和取舍

百科