1.const定义常量
在C语言中,const可以用来定义的一个常量,在变量名前加上const即可。
int const a;
定义了一个a的整数常量,且a的值不能被修改。如果要修改a的值,有以下两种方法。
方法一
int const a=100;
在定义时,就对它进行初始化
方法二
在函数中声明const的形参在函数调用时会得到实参的值。
重点:const涉及指针变量的情况
const int * a;
int * const a;
在第一条语句中,const修饰的时指针a所指向的对象,也就是说我们无法同过指针a来修改其指向的对象的值。但是指针a本身的地址是可以改变的,既可以指向其他对象。
第二条语句中,cosnt修饰的指针a。因此,指针本身(地址)是不可以改变的,而指针所指向的对象的值是可以改变的。
2.define定义常量
define实际是一个预处理指令,其用途远大于定义常量这一功能。这里只介绍define定义常量的基本用法。
使用define实际是进行符号替换,方法为
#define 符号名 替换列表
符号名必须符合标识符命名规则。替换列表可以是任意字符序列,如数字,字符串,表达式等。列如:
#define MUN “work hard!”/*后面的所有的MUN都会被替换为work hard!*/
#define AUS 99 /*后面的所有的AUS都会被替换为99!*/
#define DEPP “a” /*后面的所有的DEPP都会被替换为“a”!*/
习惯上,经常用大写字母来命名符号位,而用小写字母来命名变量
注意:我们在用#define的时候,千万记得不要在末尾加“;”,很多初学者些代码时习惯在每句代码后面加“;”。这里要小心。
3.作用域
定义:程序中可以访问一个指示符的一个或多个区域,既变量出现的有效区域,决定了程序的那些部分通过变量名来访问变量。一个变量根据其作用域的范围可以分为函数原型作用域,局部变量和全局变量。
1).函数原型作用域,其作用域始于“(”,结束于“)”。
如下列原型声明:
double Area(double radius);
radius 的作用域尽在于此,不能用于程序正文其它地方,因而可以省略。
2).局部变量
在函数内部定义的变量称为局部变量。局部变量仅能被定义该变量的模块内部的语句所访问。换言之,局部变量在自己的代码模块之外时不可见的。
对于局部变量,要注意的是,它们仅存在于。定义改变量的执行代码块中,即局部变量在进入模块时生成(压入堆栈),在退出模块时消亡(弹出堆栈)。定义局部变量的最长见的代码块时函数,代码如下:
/*在函数内声变量*/
void function1(){
int x=10;
}
void function2(){
int x;
x=20;
}
整数变量x被定义了两次,一次在function1中,另一次在function2中,function1和function2中的x互不相关,原因是每个x作为局部变量仅在被定义的模块内可见。
3).全局变量
与局部变量不用,全局变量贯穿整个程序,它的作用域为源文件,可被源文件中的任何一个函数使用。他们在整个程序执行期间保持有效。示例代码:
#include <stdio.h>
int a,b;//全局变量
void function1(){
}
float x,y;
void function2(){
}
int main(int argc,char * argv[])
{
return 0;
}
得出结论:上例中定义了a,b,x,y都是在函数外部定义的外部变量,都是全局变量。x,y是在function1之后,在function1内没有对x,y声明,所以他们在function1中无效,a,b定义在源程序最前面,因此在function1,function2,main内不加声明就可以使用。
对于全部变量有以下几点需要说明。
(1)对于局部变量的定义和声明,可以不加区分,而对于全局变量则不然。全局变量的定义和全局变量的声明并不是一回事,全局变量定义必须在所在的函数之外,且只能定义一次,其一般形式为
[extern] 类型说明符 变量名,变量名.....
其中extern可以省去不写,例如:
int a,b;等效于extern int a,b;
而全局变量声明出现在要使用改变量的各个函数内。在整个程序内,可能出现多次。全局变量在定义时就已经分配了内存单元,并且可做初始赋值。全局变量声明不能在赋予初值,只是表明在函数内要使用某外部变量。
(2)外部变量可加强函数模块之间的数据联系,但是又使函数要依赖这些变量,因而使得函数的独立性降低。从模块化程序设计的观点来看这是不利的,因此在不必要时尽量不要使用全局变量。
(3)全局变量的内存分配是在编译过程中完成的,它在程序的全部执行过程中都要占用储存空间,而不是仅在需要时才开辟储存空间。
(4)在同一源文件中,允许全局变量和局部变量同名。在局部变量的作用域内,全局变量不起作用。因此,若在改函数中想要使用全局变量,则不能在定义一个同名的局部变量。
(5)全局变量的作用域可以通过关键字extern扩展到整个文件或其他文件。