为什么我必须以这种方式声明指针?



我一直在通过查看其他代码来练习,但我无法理解以下概念:

int *ptr2int = &varInt;
int **ptr2ptr = &ptr2int;
int ***ptr2ptr2 = &ptr2ptr;

为什么第一个指针声明使用一个 *,第二个使用两个,第三个使用三个?指针究竟是如何工作的,* 在做什么?

第一个指针是指向int的指针,所以这是一个*

第二个指针是指向int的指针。这样 2**.

第三个也一样。

指针表示对象的地址,在第一种情况下表示int的地址。然后,您可以有一个地址指向一个int的地址。

等。

在这种情况下,*意味着变量类型是"点"。
varInt是一个int,所以指向其地址ptr2int是"指向int的指针",或int *
ptr2ptr指向ptr2int的地址,所以它是一个"指向int的指针",即int **
ptr2ptr2指向ptr2int的地址,所以它是一个"指向指向 int 的指针的指针",或int ***

如果在变量名称之前至少存在一个星号,则该变量是一个指针。唯一使指针不同的常规变量是指针仅用于存储变量的地址((。 让我们看下面的例子:

int     *ptr2int = &varInt; //line 1
int*    *ptr2ptr = &ptr2int;//line 2
int**   *ptr2ptr2 = &ptr2ptr;//line 3

我把星号分开,让你轻松想象。

  • 在第一行,因为ptr2int之前存在一个星号,所以ptr2int将是一个指针,ptr2int 将用于指向int变量(ptr2int将存储int值的地址,在本例中是varInt的地址(。
  • 在第二行,因为ptr2ptr前面存在一个星号,所以ptr2ptr将是一个指针,但指针与第一行的指针不同,这一行的指针将用于指向一个int*变量(int*变量的地址,在这种情况下是地址ptr2int(。
  • 第三行以此类推,因为在ptr2ptr2之前存在一个星号,所以它是一个指针,指针将用于存储int**变量的地址。ptr2ptrint**类型。
int i = 0; // integer type

如果我想指向i我需要指向整数类型的指针

int* ip; // pointer to integer type

如果我想指向ip我需要指向(指向整数(类型的指针

int** ipp; // pointer to (pointer to integer) type

这是必需的,因为ip是类型int*.所以指向它的指针int**.

每当需要指向给定类型的指针时,都可以在声明中使用*。即使该类型已经是指针类型。

因此,要指向一个值,您需要int*.

因此,要指向指向值的指针,您需要int**

因此,要指向指向值的指针,您需要int***

因此,要指向值的指针的指针,您需要int****

等。。。

最新更新