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;
}