首页 > 编程语言 >C++指针类型的局部变量初始化

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

时间:2023-01-25 13:55:26浏览次数:52  
标签:初始化 变量 int 局部变量 程序 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。

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

标签:初始化,变量,int,局部变量,程序,C++,指针
From: https://www.cnblogs.com/Groot3377/p/17066883.html

相关文章

  • C++ 单例模式最佳实践
    单例模式有很多种实现:懒汉/饿汉非线程安全线程安全每次判空加锁(效率不高)DCL:Double-checklock(繁琐,C++11之前的最佳实现)Meyers’singleton:静态变量(简洁,C++11之后......
  • C++ 实现复制赋值运算符重载
    考察点返回值类型MyClass&,可以连续赋值参数类型:(constMyClass&rhs)或者(MyClassrhs)值传递(copy-swap)自赋值安全无内存泄漏,旧值需要析构异常安全参考实现c......
  • 【奇妙的数据结构世界】 用经典例题对数组进行全面分析 | C++
    ​​​​​​第八章  数组:::hljs-center目录第八章数组●前言●一、数组是什么?1.简要介绍2.具体情况●二、数组典型例题——一维&二维&三维1.一维数组......
  • C/C++ 单链表的实现(初始化、插入、删除、销毁)
    #include<iostream>#include<Windows.h>#defineMAX_SIZE100usingnamespacestd;//单链表typedefstruct_LinkList{intdata;//数据域struct_LinkL......
  • gin框架分析二:gin初始化,默认配置实例构建过程
    gin的函数调用流程gin的函数调用过程大概如下图:GIN函数调用过程第一步构建GIN实例,第二步构建GIN路由,第三步则是启动http.server包,坚挺HTTP请求,并将请求处理交给gin框架......
  • C++ 类的成员函数指针
    classdog{intname;public:dog();voidprintname();};dog::dog(){cout<<"dog构造"<<endl;};voiddog::printname(){cout<<"dog"<<endl;......
  • C++之*与**与&的爱恨情仇
      一、解释*和&&在变量定义区,表示引用int&x;&在变量操作区,表示取地址符intx=10,*p=&x;*在变量定义区,表示指针int*x;*在变量操作区,表示解引用int*x;cout<<*x......
  • C++小例子【未更新完】
    题目目录​​题目1:全排列​​​​题目2:三数排序​​​​题目3:1+2+3+...+100=?​​​​题目4:大整数相加​​​​题目5:无零整数​​题目1:全排列全排列用1、2、3三个数字可......
  • 安卓请求后端初始化列表数据
    :1、首先在安卓端实现一个接口,用来接收请求,获取列表数据:publicinterfaceGetListDataInterface{@GET("/listData")Call<List<String>>getListData();}......
  • 算法竞赛向 C++ Standard Library 使用速查
    因网络上STL教程大多零散且缺乏严谨性,本文对算法竞赛所需C++StandardLibrary做了一个较为全面的总结。全文主要参考以下文档:Containerslibrary-cppreference.c......