C++指针类型的局部变量初始化

编译器一般不会对一般变量进行初始化,当然也包括指针。所以负责初始化指针变量的只有程序员自己。

使用未初始化的指针是相当危险的。因为指针直接指向内存空间,所以程序员很容易通过未初始化的指针改写该指针随机指向的存储区域。而由此产生的后果却是不确定的,这完全取决于程序员的运气。例如下面的程序片段:

#include <iostream> 
int main()  
{  
     int *pInt;  
     std::cout<<pInt<<"\n";  
     return 0;  
} 

  在VC++中,程序在Release模式下输出0x004080d0,而在Debug模式下输出0xcccccccc。很明显未初始化的指针指向的是一个随机的地址。如果对其执行写操作会怎样?那很有可能会直接导致程序崩溃。

       可以将指针初始化为某个变量的地址。需要注意的是,当用另一个变量的地址初始化指针变量时,必须在声明指针之前声明过该变量。代码片段如下所示:

int number = 0;     // Initialized integer variable  
int* pNumber = &number;     // Initialized pointer 

  或者初始化为空指针

int* pNumber = NULL;     // Initialized pointer as NULL 

  如果使用未初始化的局部变量,程序编译时会给出警告C4700:

warning C4700: 使用了未初始化的局部变量"**" 

  对于全局变量来说,在声明的同时,编译器会悄悄完成对变量的初始化

#include <iostream> 
int *pInt;  
int main()  
{  
    std::cout<<pInt<<"\n";  
    return 0;  
} 

  此时,程序编译不会再出现警告,程序输出:00000000。

使用未初始化的局部指针变量是件很危险的事,所以,在使用局部指针变量时,一定要及时将其初始化。

posted @ 2023-01-25 13:47  GROOT3  阅读(278)  评论(0)    收藏  举报