C++中变量的类型与作用域学习教程
C++ 变量类型 变量其实只不过是程序可操作的存储区的名称。C++ 中每个变量都有指定的类型,类型决定了变量存储的大小和布局,该范围内的值都可以存储在内存中,运算符可应用于变量上。
C++ 也允许定义各种其他类型的变量,比如枚举、指针、数组、引用、数据结构、类等等,这将会在后续的章节中进行讲解。 变量定义就是告诉编译器在何处创建变量的存储,以及如何创建变量的存储。变量定义指定一个数据类型,并包含了该类型的一个或多个变量的列表,如下所示: int i,j,k; char c,ch; float f,salary; double d; 行 int i,k; 声明并定义了变量 i、j 和 k,这指示编译器创建类型为 int 的名为 i、j、k 的变量。 type variable_name = value; 下面列举几个实例: extern int d = 3,f = 5; // d 和 f 的声明 int d = 3,f = 5; // 定义并初始化 d 和 f byte z = 22; // 定义并初始化 z char x = 'x'; // 变量 x 的值为 'x' 不带初始化的定义:带有静态存储持续时间的变量会被隐式初始化为 NULL(所有字节的值都是 0),其他所有变量的初始值是未定义的。 变量声明向编译器保证变量以给定的类型和名称存在,这样编译器在不需要知道变量完整细节的情况下也能继续进一步的编译。变量声明只在编译时有它的意义,在程序连接时编译器需要实际的变量声明。 尝试下面的实例,其中,变量在头部就已经被声明,但它们是在主函数内被定义和初始化的: #include <iostream> using namespace std; // 变量声明 extern int a,b; extern int c; extern float f; int main () { // 变量定义 int a,b; int c; float f; // 实际初始化 a = 10; b = 20; c = a + b; cout << c << endl ; f = 70.0/3.0; cout << f << endl ; return 0; } 当上面的代码被编译和执行时,它会产生下列结果: 30 23.3333 同样的,在函数声明时,提供一个函数名,而函数的实际定义则可以在任何地方进行。例如: // 函数声明 int func(); int main() { // 函数调用 int i = func(); } // 函数定义 int func() { return 0; } C++ 中的左值(Lvalues)和右值(Rvalues) C++ 中有两种类型的表达式: int g = 20; 但是下面这个就不是一个有效的语句,会生成编译时错误: 10 = 20; 变量作用域
局部变量 在函数或一个代码块内部声明的变量,称为局部变量。它们只能被函数内部或者代码块内部的语句使用。下面的实例使用了局部变量: #include <iostream> using namespace std; int main () { // 局部变量声明 int a,b; int c; // 实际初始化 a = 10; b = 20; c = a + b; cout << c; return 0; } 全局变量 在所有函数外部定义的变量(通常是在程序的头部),称为全局变量。全局变量的值在程序的整个生命周期内都是有效的。 #include <iostream> using namespace std; // 全局变量声明 int g; int main () { // 局部变量声明 int a,b; // 实际初始化 a = 10; b = 20; g = a + b; cout << g; return 0; } 在程序中,局部变量和全局变量的名称可以相同,但是在函数内,局部变量的值会覆盖全局变量的值。下面是一个实例: #include <iostream> using namespace std; // 全局变量声明 int g = 20; int main () { // 局部变量声明 int g = 10; cout << g; return 0; } 当上面的代码被编译和执行时,它会产生下列结果: 复制代码 代码如下: 10 初始化局部变量和全局变量 当局部变量被定义时,系统不会对其初始化,您必须自行对其初始化。定义全局变量时,系统会自动初始化为下列值:
|