在这种情况下,int**在C中是什么意思

What does int** mean in C in this context?

本文关键字:是什么 意思 int 这种情况下      更新时间:2023-10-16

这里是上下文:

int *t[10];
int n;

有人告诉我t-n的类型是int**。我不太明白int**是什么意思,它是指针的指针吗?为什么指针表int的减法会得到一个int的指针?当我们引用*t[0]时,我们是将int* p引用为指针本身,因为它是表的一个元素,还是我们隐含地需要一个指针指向槽,而不是让指针指向另一个位置?

提前感谢你向我解释这一点。

我不完全明白int**的意思,它是指针的指针吗?

是。

  • int=整数
  • int *=指向整数的指针
  • int **=指向-的指针(指向整数的指针(
  • int ***=指向-的指针(指向-(指向整数的指针((
  • (依此类推(

为什么指针表的减法-int会给出int的指针的指针?

因为在C(和C++(中,数组在必要时会衰减为指向第一项的指针。例如,int *t[10]是一个包含指向int项的10个指针的数组。t可以衰减为指向t[0]的指针,即指向-(指向int的指针(、int **的指针。然后,该指针可以用于指针算术(如减法(。

因此,从t中减去n会得到一个int **,它指向10项数组开头"之前"的n项(除非n为零或小负数,否则BTW不是一个安全的指针,因为它将指向数组内存的有效边界之外(。

当我们引用*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的数组到指针的"衰减"规则。

如果TYPEint *,就像您的情况一样,那么TYPE *就是int **

由于数组由int *指针组成,因此索引到数组中的指针必然是指向该元素类型的指针。