我从C语言中学到的是int**matrix = matrix是指向int的指针,当我们想要创建一个矩阵时,我们将malloc一组contigus指针!所以这里的第一个指针指向一个指向int的指针,或者它可以指向一组指向int的指针(第一个指针当然指向第一个指针的地址)
Brievely指向1指针(只有一个)是否与从一组指针指向第一个指针相同?
我认为答案在于这个问题究竟什么是一系列的东西?
指针和数组根本不同,特别是wrt.与他们的行为sizeof()
和wrt.他们分配了什么.但是,它们有时可以互换使用,因为它们基本上都代表一个地址.
如果动态分配内存,您将收到一个指针,指向一块内存的开头.如果您分配的内存大小代表类型大小的倍数,那么应该直观地清楚,您可以在那里存储一个类型的多个元素,因为您已经为其分配了空间.由于C指针算法解释*(p + n)
-这是一样的p[n]
,并n[p]
-为的地址的访问p
加n
倍类型的元素的大小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.