不能使用没有初始化的变量

    c++对于没有初始化的变量,不允许使用,务必先初始化,否则会产生意想不到的问题。表现在一下这两方面。

    1.定义了一个变量,如果没有初始化,不能直接使用。例如: 

  int test;
  cout<<"test:"<<cout<<endl;

 

  同样道理,指针变量没有初始化它的指针,即地址,也不能直接使用。必须强调,初始化指针指向的单元与初始化指针是两个完全不同的概念。"int *q = & test; "与 "int *q; *q = test;"的意义完全不同。前者是初始化指针变量p的值即地址,后者是初始化temp的值。

  例如一个交换函数:

  void swap(int *p1, *p2)

  { int *temp;

     *temp = *p1;

     *p1 = *p2;

     *p2 = *temp;

  }

  但是这个函数就算改成以下这种方式也是不行,原因是:调用函数时不会改变实参指针变量的值,只可以改变实参指针变量所指向变量的值。

  void swap(int *p1, *p2)

  { int *temp;

     temp = p1;

     p1 = p2;

     p2 = temp;

  }

    2.在使用指针变量的时候指向数组元素的时候,不应该使用没有定义的元素,应该保证变量指向数组有效地元素,例如:

   int a[10],*p=a;

  cout<<*(p+10); //这样会调用数组中第10个元素的相邻地址,会得到不可预期的结果。

 

   3.即使string类型变量是动态分配分配内存空间,也需要初始化变量,否则就会出错。例如程序如下:

#include<iostream>
#include<string>
using namespace std;
void main()
{ int j;

//当下面这句话如果改成“string str;”不初始化,当执行到语句“gets(p)”的时候,程序会报错,因为系统没有分配空间给字符串变量str
string str="                                                                                                       "; 
char *p=&str[0]; 

cout<<"input cipher code:";
gets(p);
cout<<"cipher code:"<<str<<endl;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值