C++ 这两个语句做相同的事情

C++ 这两个语句做相同的事情,c++,pointers,C++,Pointers,很抱歉问你这个问题,但我是个新手,遇到了指针问题。你能给我解释一下为什么这两种说法最终都做了相同的事情吗 int i=7; *第一条路 int *ptrInt; ptrInt=&i; *********第二种方式 int *p_anotherWay=i; 他们没有 第一条语句将i的内存地址值分配给ptrInt 第二条语句将i本身的值赋给ptrInt,而不是它的地址 另外,第二种说法的形式也不完全正确。它在某些编译器上编译,在其他编译器上不编译。(这些“其他人”实际上做得很好)阅读有

很抱歉问你这个问题,但我是个新手,遇到了指针问题。你能给我解释一下为什么这两种说法最终都做了相同的事情吗

int i=7;
*第一条路

int *ptrInt;
ptrInt=&i;
*********第二种方式

int *p_anotherWay=i;
他们没有

第一条语句将
i
的内存地址值分配给
ptrInt

第二条语句将
i
本身的值赋给
ptrInt
,而不是它的地址


另外,第二种说法的形式也不完全正确。它在某些编译器上编译,在其他编译器上不编译。(这些“其他人”实际上做得很好)

阅读有关赋值和初始值设定项的内容。第二个不会编译。你是说
&i
?在这种情况下,应该很清楚为什么使用
&i
初始化与使用
&i
赋值具有相同的效果。当我使用第二种方法进行初始化时,我感到困惑,我不想编译并查看编译器所说的内容,而是想了解在低级别发生了什么。我认为第一种方法是正确的,无论是一步还是两步。第二步是错误的,但不是真的错误,直到编译器说你不能做。它本质上是在内存中获取一个垃圾值,在本例中,该值为7,并设置为p_。如果我错了,请纠正我。我确实编译过,它确实对我咆哮。@user3897363:这是错误的,因为类型不匹配;您不能从
int
初始化
int*
,因为该语言不允许没有强制转换的类型转换。如果编译器说它错了,那么它就错了(除非编译器错了,但在本例中它是对的)。所以正确的方法是说int*ptr=&intVariable?非常感谢。我澄清了我的疑虑。和*解除引用的地址。我在第二条语句中被搞糊涂了,因为地址也是一个整数,被分配为值为7的地址。本质上可以是任何东西。应该提到的是,第二个例子,-1
int*pSomewhere=i因为类型不匹配。是的,我知道了。谢谢你们。经过这项练习后,我对基本原理没问题。&是堆栈上变量的地址,获取该变量的地址。*是存储在指针指向的位置的值。我意识到,当您像普通变量一样使用指针时,您会得到存储在指针中的内存位置。@BeyelerStudios暴力强制转换并不能真正解决主要问题/误解。这个错误是立即发布的,并且是OP在语义层面上正确构思的。现在不要因为建议暴力施法而伤害这种理解!(如果可以的话,我甚至会再次投反对票)@πνταῥεῖ 我没有提出任何建议,我只是举了一个例子(在本例中是有效代码),并对OP的问题进行了精确的评论。但是谢谢你的否决票:(@BeyelerStudios“我没有提出任何建议”你当然有!你的“答案”中至少只有一点是提出一些代码来“解决问题”。除了(非常狭隘的)评论,没有更多的解释。仅仅使用这种格式就值得对VLQ答案投否决票,那么你到底在担心什么?!?
int i = 7;
int *pI = &i; // pointer to i
int *pSomewhere = (int*)i; // pointer to address 0x7