创建变量时,例如:
int x = 5;
它将存储在内存中的某个位置,很酷。
但是,当我通过执行以下操作更改变量的值时:
x = 10;
内存中会发生什么?
x
的新值是否使用相同的内存地址覆盖旧值?
还是将新值存储在新的内存地址中,然后删除旧地址?
当我遇到指针时出现了这个问题。看来使用指针更改变量的值与使用另一个值定义变量是一样的。
这是我的代码(大部分是注释(lol)):
#include "iostream"
int main()
{
int x = 5; // declaring and defining x to be 5
int *xPointer = &x; // declare and define xPointer as a pointer to store the reference of x
printf("%d\n",x); // print the value of x
printf("%p\n",xPointer); // print the reference of x
x = 10; //changing value of x
printf("%d\n",x); //print new value of x
printf("%p\n",xPointer); //print the reference of x to see if it changed when the value of x changed
*xPointer = 15; //changing the value of x using a pointer
printf("%d\n",x); //print new value of x
printf("%p\n",xPointer); //print reference of x to see if it changed
return 0;
}
这是输出:
5
00AFF9C0
10
00AFF9C0
15
00AFF9C0
如您所见,内存地址是相同的,因此指针的指向是什么(双关语)。
答案 0 :(得分:2)
声明int x = 5;
时,是说x
具有自动存储期限,并用值5
初始化。
在x
的生存期内,指向x
(即&x
)的指针将具有相同的值。
您可以通过分配x
或通过设置了x = 10
的指针取消引用*xPointer = 15
来更改int* xPointer = &x;
的值。
语言标准没有提及指针值是内存地址,尽管可能是。对于语言的工作方式,这是一个普遍的误解。
(实际上是x
的新值可能导致内存中的位置发生更改。只要指针值不发生变化,语言就允许这样做。操作系统可能为避免内存碎片整理,请执行与此类似的操作。)