指针初始化之间的差异 当我在阅读C++底漆时,发现了这个例子,我不理解 double dval; double *pd = &dval; //ok:initializer is the address of a double double *pd2 = pd; // ok:initializer is a pointer to double

指针初始化之间的差异 当我在阅读C++底漆时,发现了这个例子,我不理解 double dval; double *pd = &dval; //ok:initializer is the address of a double double *pd2 = pd; // ok:initializer is a pointer to double,c++,pointers,C++,Pointers,既然*pd也是指针,那么*pd2不应该是指向指针的指针吗?有人能解释一下内存地址在后台发生了什么(分配给pd2)吗 pd2的值是分配给它的值,即dval的地址,该地址存储为pd的值并分配给前者。pd2的值是分配给它的值,即dval的地址,将其存储为pd的值并分配给前者 既然*pd也是指针,那么*pd2不应该是指向指针的指针吗 否。pd2被分配了pd当前持有的值。因此,pd2最终指向dval。如果希望pd2指向pd本身,而不是pd指向的对象,则只能使用指向指针的指针,例如: double dval

既然
*pd
也是指针,那么
*pd2
不应该是指向指针的指针吗?有人能解释一下内存地址在后台发生了什么(分配给
pd2
)吗

pd2的值是分配给它的值,即
dval的地址,该地址存储为
pd的值并分配给前者。

pd2的值是分配给它的值,即
dval的地址,将其存储为
pd
的值并分配给前者

既然
*pd
也是指针,那么
*pd2
不应该是指向指针的指针吗

否。
pd2
被分配了
pd
当前持有的值。因此,
pd2
最终指向
dval
。如果希望
pd2
指向
pd
本身,而不是
pd
指向的对象,则只能使用指向指针的指针,例如:

double dval;
double *pd = &dval;
double **pd2 = &pd;
有人能解释一下内存地址(分配给pd2的是什么)在后台发生了什么吗

指针只是一个恰好是内存地址的数字。如果您认为指针是整数,那么您提供的代码与以下幕后代码没有太大区别:

double dval;
uintptr_t pd = address of dval;
uintptr_t pd2 = pd;
您只是将一个指针值(一个数字)按原样分配给另一个指针(数字)变量

既然
*pd
也是指针,那么
*pd2
不应该是指向指针的指针吗

否。
pd2
被分配了
pd
当前持有的值。因此,
pd2
最终指向
dval
。如果希望
pd2
指向
pd
本身,而不是
pd
指向的对象,则只能使用指向指针的指针,例如:

double dval;
double *pd = &dval;
double **pd2 = &pd;
有人能解释一下内存地址(分配给pd2的是什么)在后台发生了什么吗

指针只是一个恰好是内存地址的数字。如果您认为指针是整数,那么您提供的代码与以下幕后代码没有太大区别:

double dval;
uintptr_t pd = address of dval;
uintptr_t pd2 = pd;

您只是将一个指针值(数字)原样分配给另一个指针(数字)变量。

指针是内存地址<代码>双*pd2=pd将一个指针指定给另一个指针。没有魔法,只是一个简单的赋值操作。两个指针都指向同一内存地址

pd2
中的值与
pd
中的值相同。如果要取消对
pd
pd2
的引用,则会得到存储在
dval
中的值


分配
&pd
需要指向指针的指针,因为您要获取指针的地址。

指针是内存地址<代码>双*pd2=pd将一个指针指定给另一个指针。没有魔法,只是一个简单的赋值操作。两个指针都指向同一内存地址

pd2
中的值与
pd
中的值相同。如果要取消对
pd
pd2
的引用,则会得到存储在
dval
中的值


分配
&pd
需要指向指针的指针,因为您要获取指针的地址。

首先声明一个double
dval
,然后声明一个指向该double的指针(因为它是由doubles address
&dval
设置的)。 然后将第二个指针设置为等于第一个指针。 最后,你有:

pd = pd2 = &dval

这是指向同一地址的两个指针,而不是指向另一个指针的指针。

首先声明一个double
dval
,然后声明一个指向该double的指针(因为它是由doubles address
&dval
设置的)。 然后将第二个指针设置为等于第一个指针。 最后,你有:

pd = pd2 = &dval

这是指向同一地址的两个指针,不是指向另一个指针的指针。

x的地址==指向x的指针
*pd
不是指针
*pd
是类型为
double
的表达式
pd
是指针。x的地址==指向x的指针
*pd
不是指针
*pd
是类型为
double
的表达式
pd
是一个指针。