繁体   English   中英

指针初始化之间的区别

[英]Difference between pointer initializations

当我在阅读C ++ Primer时,发现了一个我不理解的示例

double dval;
double *pd = &dval; //ok:initializer is the address of a double
double *pd2 = pd; // ok:initializer is a pointer to double

*pd2也是指针,因为*pd也是指针吗? 有人可以用内存地址(分配给pd2 )解释在后台发生什么吗?

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

*pd2也是指针,因为*pd也是指针吗?

不给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;

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

指针是一个内存地址。 double *pd2 = pd; 将一个指针分配给另一个指针。 没有魔术,只有一个简单的分配操作。 两个指针都指向相同的内存地址。

pd2中的值与pd值相同。 如果要取消引用pdpd2 ,则将获得存储在dval的值。

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

首先,您声明一个double dval ,然后声明一个指针,该指针指向该double(由于double由&dval )。 然后将第二个指针设置为等于第一个指针。 所以最后,您有了:

pd = pd2 = &dval

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM