常量和变量的总结

常量与变量

      任何一个C语言程序中处理的数据,无论是什么类型,都是以常量或变量的形式出现的,在程序设计中,常量可以作说明而直接引用,但是变量应遵循“先定义,后使用;先赋值,后引用”的原则。


常量

是指在程序运行中其值不能改变的量.常量可以直接写在程序中,按其表现形式分为直接常量和符号常量。


直接常量:

在程序中不需要任何说明就可直接使用的常量。按数据类型可以分为整型常量、实型常量、字符常量和字符串常量。

(1)整型常量:整型常量即数学中的整数,在C语言中的整型常量有3种表示法:十进制数,如100;八进制数,如0123;十六进制数,如0x123。

(2)实型常量:实型常量又称浮点常量,即数学中含有小数点的实数。在C语言中的实型常量有2种表示方法:十进制小数形2.25;指数形式,如                                 1.25E+002。

(3)字符常量:字符常量是指用单撇号括起来的单个字符。在C语言中的字符常量有2类,一类是可以显示的字符常量,如'x'、'1';另一类是以反斜杠                           开头的转义字符,如'\n'。               

(4)字符串常量:字符串常量是指用双撇号括起来的单个或多个字符,如"hello"、"x"。另外,不管字符串是常量还是变量,它最后都有一个字符串结                               标志'\0',所以字符串常量"x"比字符变量'x'的存储空间多一个。


符号常量:

符号常量是指用符号表示的常量。用什么符号表示什么常量需要用户自己定义,所以符号常量在使用之前必须先定义。注意这里的定义和变量的定义是有区别的,符号常量的定义只是方便替换,并不涉及到数据类型。定义过后就可以直接引用。其定义的一般形式为:#define  标识符  常量

例如:

#define PI 3.1415926

当程序中遇到PI标识符时,就用常量3.1415926代替。使用符号常量的好处是当需要修改一个数据时,不需要在程序中每个出现这个数据的地方都修改,只需要从定义位置的修改就可以了。


#include<stdio.h>

#define PI 3.14

void main()

{

    printf("%c",m);

    printf("%c",'m');

    printf("%d",PI);

}

在上面这段代码中,由于第一个printf函数的中m是变量没有定义,所以程序编译出错。但第二个printf函数是正确的,因为'm'是一个字符常量,可以直接使用。第三个printf'函数中PI是符号常量,经过预处理定义后就能直接使用,所以在函数体内没有再定义。



变量

为了方便管理、引用和存储程序中的数据,所以使用变量来进行各种数据操作。变量在程序运行期间其值可以改变。在C语言中变量有三种必要的属性:数据类型、变量名、变量值。

变量定义格式:类型说明符  变量名1,变量名2...

其中类型说明符必须是一个有效的数据类型。

例如:int  x,y;       //定义了整型变量x,y


数据类型:

数据类型决定了数据存储空间的大小和能对数据执行的操作。系统会根据数据类型进行按需分配存储空间,根据数据类型判断数据的操作是否合法,如float变量进行求余运算(%)就会出错。

c语言的数据类型分为基本类型、构造类型和空类型三大类。

(1)基本类型:1. 整型:a 基本整型(int)

                                         b 短整型(short int)

                                         c 长整型(long int)

                           2 .实型:a 单精度型(float)

                                         b 双精度型(double)

                           3 .字符型(char)

(2)构造类型:1 .数组类型

                           2 .结构体类型

                           3 .共用体类型

                           4 .指针类型

(3)空类型(void)


变量名:

数据类型定义了数据的存储空间大小,变量名就是变量在计算机中存储单元的地址符号。通过变量名可以访问该变量。变量的命名必须遵循标识符的命名规则,且保留字不能当作变量名。另外变量的命名尽量增加可读性,能做到顾名思义。例如,变量是存储学生分数的变量,那么就可以命名这个变量为score。


变量值:

变量遵循“先赋值,后引用”的规则。赋值可以在变量定义的同时赋初值,也可以在变量定义之后赋值。注意不能给数组整体赋值,如数组变量str="abcd"。但可以给数组初始化,如char str[]="abcd"。

如果没有给变量赋初值,会怎样?

当该变量是静态存储类型的变量时,系统编译时会自动赋初值0;

当该变量是动态存储类型的变量时,在没有赋初值的情况下,将会有一个不确定的值充当其初始值。这是非常危险的,尤其是对一个不确定的指针来说,修改它所指向存储单元的值可能会造成巨大的危险,为此一般都要求程序为变量赋予合理的初值。


定义的变量在程序中是否随处可用?赋值后的变量是否在程序运行期间总能保存其值?这些问题就涉及到了变量的作用域和生存期


变量的作用域:

作用域顾名思义的意思就是作用的有效范围,它在什么地方起作用,在什么地方不起作用或者说在什么地方可见在什么地方不可见。变量的作用域由它定义的位置决定。

变量按作用域可以分为局部变量全局变量

局部变量:复合语句中定义的变量(作用域只在复合语句内),函数内定义的变量(作用域在这个函数内)。

全局变量:在函数体外定义的变量。全局只是相对局部而言,全局并不是指整个源程序。全局变量的作用域是从定义的位置开始,到源程序的结束。如                   果要在定义点之前使用全局变量的话就需要使用关键字extern对其作用域进行扩展。

注意:同一作用域内不允许出现两个相同的变量名,若全局变量和函数体内的局部变量同名,则全局变量在那个函数内会被屏蔽,只有局部变量有效。           全局变量和局部变量尽量不要同名,否则容易出现不易发现的变量调用错误。不同作用域可以出现同名变量,因为它们不会相互影响。


变量的生存期:

变量的存在时间称为生存期。变量的生存期取决于变量的存储类别。所谓存储类别是指变量在内存中的存储方式,根据系统为变量分配的存储区域不同,存储方式分为静态存储动态存储

静态存储:在程序运行期间分配固定的存储空间。是静态存储方式的变量有全局变量和用static关键字声明的变量。静态存储的特点:在编译时分配内                     存空间并进行初始化。在程序运行期间,变量一直存在,直到程序结束,变量对应的内存空间才被释放。

动态存储:在程序运行期间根据需要动态分配存储空间。是动态存储的变量有局部变量和自动变量等。动态存储的特点:变量所在的函数在开始调用时                  动态分配存储空间,函数调用结束时变量空间被释放。也就是说,函数每次调用,局部变量就会重 新分配空间。如果局部变量没初始化,                    那么变量的值就是随机数。


局部变量和静态局部变量的区别:

局部变量属于动态存储方式,只有在定义它的函数被调用时,才分配存储空间,函数调用结束时,释放存储空间。它的作用域是在定义它的函数内,生存期是函数被调用的期间。若局部变量没初始化,则其值将不确定。

静态局部变量是用static声明的局部变量,它属于静态存储方式。在编译时为其分配存储空间,在程序执行过程中,静态局部变量始终存在,即使定义它的函数调用结束也不释放存储空间。静态局部变量的生存期为整个程序执行期间。静态局部变量的作用域和局部变量的作用域相同,只能在定义它的函数内使用,退出该函数后,尽管静态局部变量的值还存在,但其它函数不能引用。相当于对其它函数不可见。


#include<stdio.h>
void fun()
{
   static int n;  //定义静态局部变量n,系统自动赋初值0
   int a=0;         //定义局部变量a
   a++;n++;
   printf("a=%d,n=%d\n",a,n); 
}
void main()
{  
   fun();
   fun();
}


程序运行结果

a=1,n=1

a=1,n=2


全局变量和静态全局变量的区别:

静态全局变量是全局变量用关键字static声明的变量,静态全局变量和全局变量的作用域相同。不同点是全局变量可以被其它的源文件引用,而静态全局变量只被定义它的源文件独享。这样可以防止当其它源文件包含静态全局变量的源文件时,使用出现混乱。




评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值