C++ 当变量未分配时,为什么指针地址不同?未分配和已分配的变量指针地址不相同

C++ 当变量未分配时,为什么指针地址不同?未分配和已分配的变量指针地址不相同,c++,pointers,memory,C++,Pointers,Memory,当变量未分配时,为什么指针地址不同? 为什么未分配的变量指针地址比分配的变量指针地址大得多 输出为: 0x76d9734a 0x29fee8 当您声明一个变量而不初始化它时,它的值是未定义的。这意味着首先,您的指针只包含一些随机数据,当您声明该指针时,这些数据恰好存在。现在在堆栈上声明一个变量,并将指针设置为指向它。当然,这意味着指针现在保存的是变量的地址,而不是声明之后的未定义垃圾 关于指针值的大小:由于指针未初始化,它只包含一些不太可能指向有效内存地址的随机位。但是,初始化它时,它指向堆栈上

当变量未分配时,为什么指针地址不同? 为什么未分配的变量指针地址比分配的变量指针地址大得多

输出为:

0x76d9734a 0x29fee8


当您声明一个变量而不初始化它时,它的值是未定义的。这意味着首先,您的指针只包含一些随机数据,当您声明该指针时,这些数据恰好存在。现在在堆栈上声明一个变量,并将指针设置为指向它。当然,这意味着指针现在保存的是变量的地址,而不是声明之后的未定义垃圾

关于指针值的大小:由于指针未初始化,它只包含一些不太可能指向有效内存地址的随机位。但是,初始化它时,它指向堆栈上的一个具体位置。由于堆栈位于内存的某个有限区域,并且不会随机分布在整个地址空间中,所以变量的地址总是在同一个范围内

或:


请注意,nullptr是一个有效值。

未初始化指针包含未初始化变量,初始化变量包含垃圾。您的指针未初始化。您能自己回答以下类似问题吗?int i;couttherw是程序中任何地方都没有使用的指针地址。int*指针;您所描述的可能是OP的实现如何处理这种情况。就C++而言,它只是未定义的行为,不是随机数据或垃圾。@克里斯蒂娜哈克尔,你说得对。但是,要描述OP的行为是看,参考实现所做的是非常有用的,特别是因为OP似乎并没有很多C++的经验。
#include<iostream>
using namespace std;

int main ()
{
    int * pointer;

    cout<<pointer;

    int variable = 12;

    pointer = &variable;

    cout<<endl<<pointer<<endl;

    return 0;
}
int * pointer;

cout<<pointer;
int * pointer = /* some valid value */;
int * pointer;
pointer = /* some valid value */;