int * pInteger1=NULL;
int * pInteger2=NULL;
cout<<pInteger1<<endl; 
cout<<pInteger2<<endl; 
为什么结果都为0x00000000,两个指针的地址一样呀!
每个进程的虚拟地址不是有专门为NULL指针分配空间吗?
如果我接着
* pInteger1=5;
* pInteger2=6;
会发生什么事情呢?地址和内容到底是怎么分配的呀?

解决方案 »

  1.   

    两个输出都是0,并不是它们的地址而是说它们的值是一样的,都是0,即都指向地址0. 想输出其地址要:
    cout<<(int)&pInteger1<<endl; 
    cout<<(int)&pInteger2<<endl; 
    如果接着
    * pInteger1=5;
    * pInteger2=6;
    那么你和程序多半会崩溃,因你地址0处是无法写入的.想深入理解地址和内容,你需首先有<<计算机组成及原理>>的基础.
      

  2.   

    指针 是一个 “变量”, 他可以赋值 比如 pInteger1 = 0 ;这个值是一个 内存地址,“*” 是一个操作符,或运算符, 是“取地址的值”楼主应该 好好理解 一下 内存,内存地址,的概念,
    进一步,理解一下 堆栈的 概念。
      

  3.   

    NULL是指针初始化引进的 
    类似Z0区会把所有RAM初始化为0的工作赋值一样