我一直在通过查看其他代码来练习,但我无法理解以下概念:
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**
变量的地址。ptr2ptr
是int**
类型。
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****
。
等。。。