指针初始化之间的差异 当我在阅读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
需要指向指针的指针,因为您要获取指针的地址。首先声明一个doubledval
,然后声明一个指向该double的指针(因为它是由doubles address&dval
设置的)。
然后将第二个指针设置为等于第一个指针。
最后,你有:
pd = pd2 = &dval
这是指向同一地址的两个指针,而不是指向另一个指针的指针。首先声明一个doubledval
,然后声明一个指向该double的指针(因为它是由doubles address&dval
设置的)。
然后将第二个指针设置为等于第一个指针。
最后,你有:
pd = pd2 = &dval
这是指向同一地址的两个指针,不是指向另一个指针的指针。x的地址==指向x的指针*pd
不是指针*pd
是类型为double
的表达式pd
是指针。x的地址==指向x的指针*pd
不是指针*pd
是类型为double
的表达式pd
是一个指针。