gpt4 book ai didi

c++ - 为什么下面的两个代码片段从指针的角度在 C++ 中给出了不同的答案

转载 作者:行者123 更新时间:2023-11-27 22:37:07 24 4
gpt4 key购买 nike

为什么这两个代码对两个变量a和b的地址给出不同的答案?

代码 1)

int *a, *b;
*a=1;
*b=2;
cout << *a << " in " << a << endl << *b << " in " << b << endl;
*b = *a;
cout << *a << " in " << a << endl << *b << " in " << b << endl;

代码 2)

int a=1, b=2;
cout << a << " in " << &a << endl << b << " in " << &b <<endl;
b = a;
cout << a << " in " << &a << endl << b << " in " << &b <<endl;

谢谢。

最佳答案

int *a, *b;
*a=1;
*b=2;

这里你创建了两个没有初始化的新指针,然后你写到它们指向的地方。这是未定义的行为,可能会使您的程序崩溃,或者做更糟糕的事情,例如导致可能难以调试的内存损坏。

相反,试试这个:

int *a = new int, *b = new int;

这会在堆上初始化适当数量的内存并将地址分配给指针,从而可以安全地使用这样的指针。

*b = *a;

在这里,您将 a 指向的位置分配给 b 指向的位置。所以现在两个内存位置都应该存储 1(假设未定义的行为还没有使程序崩溃)。

int a=1, b=2;
cout << a << " in " << &a << endl << b << " in " << &b <<endl;
b = a;
cout << a << " in " << &a << endl << b << " in " << &b <<endl;

此处堆栈中有两个整数。它们都有不同的地址,尽管它们通常相距不远(它们可能相差 4 左右)。值如您所料,a1 并且 b2 第一次出现,然后都是其中有 1

why these two cods gives different answers for address of two variable a and b

第一次它是一个未初始化的值,通常是一个已经在内存中的值,只是还没有被清理。无论哪种方式访问​​它都是未定义的行为。

第二次,值引用堆栈上的有效内存。这就是打印的值如此不同的原因。

关于c++ - 为什么下面的两个代码片段从指针的角度在 C++ 中给出了不同的答案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52835133/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com