c语言的变量,常量及作用域等

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扩展到整个文件或其他文件。

猜你喜欢

转载自www.cnblogs.com/hj-1996-123/p/10211943.html