我一直在通过查看其他代码进行练习,但我无法理解以下概念:
int *ptr2int = &varInt;
int **ptr2ptr = &ptr2int;
int ***ptr2ptr2 = &ptr2ptr;
为什么第一个指针声明使用一个*,第二个使用两个,而第三个使用三个?指针如何正确工作以及*在做什么?
答案 0 :(得分:3)
第一个指针是指向int
的指针,因此就是一个*
。
第二个指针是指向int
的指针。这样2 **
。
与第三个相同。
指针代表对象的地址,第一种情况是int
的地址。然后,您可以将地址指向指向int
的地址。
等
答案 1 :(得分:1)
在此上下文中,*
表示变量类型为“点”。
varInt
是int
,因此指向其地址的ptr2int
是“指向int的指针”或int *
。
ptr2ptr
指向ptr2int
的地址,因此它是“指向int的指针的指针”或int **
。
ptr2ptr2
指向ptr2int
的地址,因此它是“指向int指针的指针”或int ***
。
答案 2 :(得分:1)
如果变量名之前至少存在一个星号,则该变量为指针。使指针与常规变量不同的唯一原因是指针仅用于存储地址(变量)。 让我们看下面的例子:
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**
类型。答案 3 :(得分:0)
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****
。
等...