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

  • 相关阅读:
    Qt对文件的删除、复制、移动、可执行文件位置
    qt关于窗口关闭触发函数/信号
    QString.toUtf8().data()的问题 & char *转换到QByteArray注意
    Qt中类型之间的转换
    C++中auto和decltype的区别和功能
    Delphi 系统[11]关键字和保留字 goto、label
    Delphi 系统[10]关键字和保留字 with
    Delphi 系统[9]关键字和保留字 for、to、downto、do、while、repeat、until
    Delphi 系统[8]关键字和保留字 if、then、else、case
    Delphi 系统[7]关键字和保留字 begin、end
  • 原文地址:https://www.cnblogs.com/hj-1996-123/p/10211943.html
Copyright © 2020-2023  润新知