【发布时间】:2021-12-24 00:57:08
【问题描述】:
我有点搞乱指针。请查看以下结果(地址)。
第一个代码:
#include <iostream>
int main(){
int a = 5;
void* pointer = &a;
std::cout << a << std::endl << &a << std::endl;
std::cout << pointer << std::endl ;
std::cin.get();
}
结果:
第二个代码:
#include <iostream>
int main(){
int a = 5;
void* pointer = &a;
std::cout << a << std::endl << &a << std::endl;
std::cout << &pointer << std::endl ;
std::cin.get();
}
结果:
为什么两个代码之间变量a的地址会发生变化?
【问题讨论】:
-
请澄清:您是在询问
0x7bfe14和0x7bfe1c之间的区别吗?还是别的什么? -
@463035818_is_not_a_number 是的,为什么地址变了?
-
变量
a的地址因不同而不同。变量a包含一个int值,并且该值设置为5。这对于两段代码都是相同的。不要纠结于变量的存储位置;该信息有时在程序内部很有用,但不要求a在两个不同的程序中位于同一位置,甚至在多次运行时也不要求位于同一程序中。跨度> -
@KenZa 不,该变量不需要存在于第一个代码中,它已被优化掉。你对它所做的只是存储一个固定值,然后再读回来,所以甚至不需要这个变量,编译器也不会使用它。编译器可以处理它,就好像您在第二个输出行中写了
&a而不是pointer,节省了一些空间和执行时间。 -
@CherryDT 哦,所以当你说“这些变量都不必真正存在”时,
c包含在此声明中
标签: c++ pointers memory-address