这两个声明"int**matrix"和"int matrix [] []"之间有什么区别?

 语涵星空 发布于 2022-12-04 15:51

我从C语言中学到的是int**matrix = matrix是指向int的指针,当我们想要创建一个矩阵时,我们将malloc一组c​​ontigus指针!所以这里的第一个指针指向一个指向int的指针,或者它可以指向一组指向int的指针(第一个指针当然指向第一个指针的地址)

Brievely指向1指针(只有一个)是否与从一组指针指向第一个指针相同?

我认为答案在于这个问题究竟什么是一系列的东西?

1 个回答
  • 指针和数组根本不同,特别是wrt.与他们的行为sizeof()和wrt.他们分配了什么.但是,它们有时可以互换使用,因为它们基本上都代表一个地址.

    如果动态分配内存,您将收到一个指针,指向一块内存的开头.如果您分配的内存大小代表类型大小的倍数,那么应该直观地清楚,您可以在那里存储一个类型的多个元素,因为您已经为其分配了空间.由于C指针算法解释*(p + n)-这是一样的p[n],并n[p]-为的地址的访问pn倍类型的元素的大小p点,现在应该是比较容易理解,你可以解释指针的开始数组.

    对于您的情况,这意味着您可以将其解释int **p为指向int-pointer 的指针.通过这个指针的记忆,可以跟随n更多的int指针,而这些指针中的每一个都代表一个int过去的地址,过去再一次,n更多的ints可能跟随.因此,即使int **p实际上是指向类型指针的指针int,也可以将其解释为二维数组.你的指针经过多少元素属于数组是你无法从数组而不是指针知道的东西,这就是为什么你通常会有一个n_size和/或m_size参数或类似的东西.

    一开始我说你可以"有时"把它们视为一样.为了明确这一点,您可以在这些情况下交替使用指针和数组:

      当传递给函数时,type[]"衰减"到type *例如f(type *a)

      如果使用[]运算符访问元素,请a[i]始终解析为*(a + i)

      当它们出现在表达式中时,例如 ++a

    cf:van der Linden - Deep C.

    2022-12-11 02:12 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有