变量和常量
常量就是赋值后不能被更改的量,如
int const a;
const int a;
这两条语句都把a声明为一个常量(整数),它的值不能被修改。
由于常量的值无法被修改,所以不能用任何其他东赋值给它,如此一来,怎样使它在一开始就拥有一个值呢?有两种方法:
法1:在声明时对其进行初始化,如下所示:
int const a = 15;
int const a = 15;
法2:在函数中声明为const的形参在函数被调用时会得到实参的值。
当涉及指针变量时,情况变得更加有趣,因为有两样东西都有可能成为常量——指针变量和它所指向的实体(即指针所指向的内存地址所存储的值)。下面几个声明的例子:
int const *pci;
是一个指向整型常量的指针。你可以修改指针的值,但你不能修改它所指向的值。相比之下:
则声明pci为一个指向整型的常量指针。此时指针是常量,它的值无法修改,但你可以修改它所指向的整型的值。
最后,在cpci这个例子里,无论是指针本身还是它所指向的值都是常量,不允许修改。
提示:
当你声明变量时,如果变量的值不会被修改,你应该在声明中使用const关键字。这种做法不仅使你的意图在其他阅读你的程序的人面前得到清晰的展现,而且这个值被意外修改时,编译器能够发现这个问题。
变量的定义形式为:
存储类型 数据类型 变量名;
auto float a;
/////////////////////////////////////////////////////////////////////////////
常见的存储类型分为四种:auto,register,static ,extern。
auto ,register和局部static变量 属于局部变量。
extern,全局static变量 属于全局变量。
//////////////////////////////////////////////////////////////////////////////
局部变量中默认的存储类型为auto,通常被省略。
全局变量存储在静态区,局部变量存储在栈区。全局变量或局部变量前加static后全部存储在静态区。
/////////////////////////////////////////////////////////////////////////////////
也就是说extern有两个作用,
第一个,当它与"C"一起连用时,如:
extern "C" void fun(int a, int b);
则告诉编译器在编译fun这个函数名时按着C的规则去翻译相应的函数名而不是C++的.
第二,当extern不与"C"在一起修饰变量或函数时,如:
在头文件中:
extern int g_Int;
它的作用就是声明函数或全局变量的作用范围的关键字,其声明的函数和变量可以在本模块活其他模块中使用,记住它是一个声明不是定义!也就是说B模块(编译单元)要是引用模块(编译单元)A中定义的全局变量或函数时,它只要包含A模块的头文件即可,在编译阶段,模块B虽然找不到该函数或变量,但它不会报错,它会在连接时从模块A生成的目标代码中找到此函数。