Java 更改C++;指针指向
我对比较Java 更改C++;指针指向,java,c++,Java,C++,我对比较Java和C++参考文献感到困惑: 在下面的java代码中,调用changePoint后,点p对象仍然指向(5,5)对象 这是因为temp变量(在chagePoint中)是在堆栈上分配的,并保存对p对象的引用(在main中)在堆中,但当我们重新分配temp时,它只指向堆中的另一个点对象,而不改变main中原始点p对象指向的位置 public static void main(String [] args) { Point p = new Point(5,5); chang
Java
和C++
参考文献感到困惑:
在下面的java代码中,调用changePoint
后,点p
对象仍然指向(5,5)
对象
这是因为temp
变量(在chagePoint
中)是在堆栈上分配的,并保存对p
对象的引用(在main
中)在堆中,但当我们重新分配temp时,它只指向堆中的另一个点对象,而不改变main中原始点p
对象指向的位置
public static void main(String [] args) {
Point p = new Point(5,5);
changePoint(p);
}
changePoint(Point temp) {
temp = new Point(4,6);
}
<>现在在C++中,如果我们在“<代码>转换点< /代码>中的这两个语句中,在主代码中发生了什么?当您执行*temp=new Point(4,5)
时,它将简单地覆盖(5,5)
对象,该对象是p
从main correct>指向的对象?但是当您执行temp=newpoint(4,5)时,main中的(5,5)
对象是否会发生内存泄漏
int main() {
Point *p = new Point(5,5);
changePoint(&p);
}
changePoint(Point *temp) {
*temp = new Point(4,5);
temp = new Point (5,6);
}
在与Java进行比较之前,您应该了解以下内容:
C++中,如果要修改传递给函数的变量,则需要传递引用:
void func1(int& value)
{
value = 5;
}
void another_function()
{
int number = 0;
func(number);
std::cout << "The value of number is: " << number << "\n";
}
void func4(int * & pointer_to_value)
{
pointer_to_value = new int;
*pointer_to_value = 17;
}
void caller4()
{
int * pointer_to_number;
func4(pointer_to_number);
}
如果要更改指针而不通过引用传递,则需要将指针传递给指针:
void func2(int * pointer_to_value)
{
*pointer_to_value = 16;
}
void caller()
{
int number = 0;
func2(&number);
std::cout << "The value of number is: " << number << "\n";
}
void func3(int * * pointer_to_point_to_value)
{
*pointer_to_pointer_to_value = new int;
**pointer_to_pointer_to_value = 23;
}
void caller3()
{
int * pointer_to_number;
func3(&pointer_to_number);
cout << "Number is: " **pointer_to_number << "\n";
}
就阵列而言,简化您的生活并使用
std::vector
。通过引用传递向量变量,如果不修改,则通过常量引用传递−1您的代码将无法编译。请只张贴真实代码。讨论不编译的代码和编译后的代码是没有意义的。为了消除混淆,不要比较它们。他们是不同的语言。C++语言有指针和引用,它们是不同的。C++代码不使用引用,而是使用指针。指针通过复制传递给函数。您的函数没有修改原始指针变量的内容。@1290*temp=新点(4,5)代码>覆盖temp
指向的实例的内容<代码>温度=新点(5,6)代码>覆盖temp
,但它是由值提供的。将changePoint
的签名更改为changePoint(Point*&temp)
以使temp
成为参考参数。请在调试器中查看这一点……您的Java解释似乎过于复杂p
通过值传递给changePoint
——它接收引用的副本。然后指定给该副本,因此原始引用保持不变。其中没有任何内容与任何引用引用的实际点
对象相关。这就是指针在C++中的工作方式。