[英]little confusion regarding C++ pointers and this powerpoint slide
在上面的幻灯片中,为什么会这样:
int* p = &x;
cout << *p << endl;
输出25? 从对指针的一点了解来看,&x是x的地址,它分配给* p,即p的值。 在那种情况下,由于&x是0003,那么* p和它的输出也应该是0003吗?
对于所有无法忍受像我这样简单的高级编码人员,我对“提前”表示歉意。
&x是x的地址,分配给* p
不,没有分配给*p
。 在该行中, p
被定义为int*
类型,并且p
被分配了x
的地址。
现在p
拥有地址0003, *p
拥有25。
*
仅与该行中的变量定义有关。 在初始化期间,将值分配给定义的变量。 如果不是这种情况, p
应该首先指向哪里? 那么应该将0003写入哪个位置?
幻灯片令人困惑,因为它表明指针变量的名称为*p
。 变量的名称仅为p
。
当打印表达式p
,将获得0003
,因为那是指针的值。
因此,指针指向地址0003
处的对象,表达式*p
从此处获取值25。
幻灯片最好说单元格0001的名称为p
。 该单元格0003有两个名称(或到达该路径的路径),分别是直接x
或间接*p
。
当我们声明指针时,我们将*
与数据类型一起使用,例如int *p
这并不意味着我们要同时声明和引用value。
所以当您输入int *p = &x;
它类似于写作
int *p;
p = &x;
现在p是0003 ,地址0003的值是25 。 您可以通过* p获得。
引用运算符(&)引用变量x的地址,该变量分配给p 。由于p持有一个内存位置的地址,因此它是指针类型(int *) 。现在(* p),其中(* )是引用运算符(*)表示p中的地址所保存的值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.