[英]What does int** mean in C in this context?
这是上下文:
int *t[10];
int n;
我被告知tn
是 int** 类型。 我不完全明白 int** 是什么意思,它是指针的指针吗? 为什么指针表的减法 - int 会给出一个 int 指针的指针? 当我们引用*t[0]
时,我们是否将int* p
引用到指针本身,因为它是表的一个元素,还是我们隐含地需要一个指向插槽的指针而不是指针指向另一个位置?
提前感谢您向我解释这一点。
我不完全明白
int**
是什么意思,它是指针的指针吗?
是的。
int
= integerint *
= 指向整数的指针int **
= 指向指针(指向整数的指针)int ***
= 指针指向(指针指向(指针指向整数))为什么指针表的减法 - int 会给出一个 int 指针的指针?
因为在 C(和 C++)中,数组会在必要时衰减为指向第一项的指针。 例如, int *t[10]
是一个包含 10 个指向 int 项的指针的数组。 t
可以衰减为指向t[0]
的指针,即指向 (pointer-to-int), int **
的指针。 然后可以将该指针用于指针算术(如减法)。
因此,从t
中减去n
会给你一个int **
,它指向你的 10 项数组的开头“之前”的n
项(顺便说一句,这不是一个安全的指针,除非n
为零或一个小的负数,因为它将指向数组内存的有效边界之外)。
当我们引用
*t[0]
时,我们是否将int* p
引用到指针本身,因为它是表的一个元素,还是我们隐含地需要一个指向插槽的指针而不是指针指向另一个位置?
我不确定我是否理解这个问题。 由于t[10]
是一个由 10 个指针组成的数组(即 10 个int *
),这意味着t[0]
是该数组中的一个项目,因此具有int *
类型。 因此*t[0]
取消引用数组中的第一个指针,产生指针指向的实际int
值。
int**
是什么意思
它是指向int
的指针的类型。 如果您取消引用此类型的变量t
(例如: *t
),您将获得一个指向int
的指针。 如果你取消引用它两次(像这样: **t
),你会得到一个int
。
如果你有TYPE a[N];
,数组表达式a
,如果求值,产生一个类型为T *
的指针,指向a[0]
。 这有时被称为 C 的数组到指针“衰减”规则。
如果TYPE
是int *
,就像你的情况一样,那么TYPE *
是int **
。
由于您的数组是int *
指针,因此索引到数组的指针必然是指向该元素类型的指针。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.