- 一、变量
- 1、变量是什么?
- 2、变量的命名规则
- 3、变量的定义及使用
- 4、变量的分类
- (1)、全局变量
- (2)、局部变量
- (3)、注意事项
- 二、常量
- 1、常量是什么?
- 2、常量的分类
- (1)、字面常量
- (2)、const 修饰的常变量
- (3)、#define 定义的标识符常量
- 语法
- 无参宏定义
- 有参宏定义
- 注意
- (4)、枚举常量
变量,是计算机语言中能储存计算结果或能表示值的抽象概念。
简单来说:变量在C语言中就是⼀个用来存放数据的容器,他的本质是程序在内存中申请的一块用来存放数据的空间。
2、变量的命名规则
a、变量名必须以字母或下划线打头,名字中间只能由字母、数字和下划线“_”组成;最后一个字符可以是类型说明符;
b、变量名的长度不得超过255个字符;
c、变量名在有效的范围内必须是唯一的。有效的范围就是引用变量可以被程序识别、使用的作用范围——例如一个过程、一个窗体等等。
d、变量名不能是计算机语言中内置的关键词(在C中像break、char、const、continue、enum、for、int、long、while等等。)
3、变量的定义及使用
定义变量的格式非常简单,如下所示:
数据类型 变量名;
两种方式:
(1)、 先声明,再赋值:
数据类型 变量名;
变量名 = 值;
int a;
a = 0;
(2)、声明并赋值:
数据类型 变量名 = 值;
int a = 0;
建议第二种定义变量时就初始化,有利于我们对整个程序的把控,否则编译器会随机赋值给变量,所以你也不知到值是多少。
#include
int main()
{
int age = 18;//定义整型变量age年龄为18
float weight = 55.5f;//定义浮点型变量weight体重为55.5
char ch = 'w';//定义字符型变量ch为字符“w”
printf("age =%d weight =%f ch =%c",age,weight,ch);//输出所对应的值
return 0;
}
4、变量的分类 (1)、全局变量
全局变量(Global variables)指在所有的函数外部定义的变量,它既可以是某对象函数创建,也可以是在本程序任何地方创建。因此可以被本程序所有对象或函数引用。
全局变量的作用域是作用于整个程序,从变量定义处开始,到本程序文件的未尾。程序执行完才释放。
如下图所示:
变量a和b为全局变量,并且主函数及函数fun1、fun2,全都可以调用它;
//定义为整型的全局变量a,b
int a = 0;
int b = 0;
//函数fun1
void fun1()
{
……
}
//函数fun2
int fun2()
{
……
return 0;
}
//主函数
int main()
{
……
return 0;
}
(2)、局部变量
局部变量(Local variables)指在程序中只在特定过程或函数中可以访问的变量,又可称之为内部变量。只能被内部引用(只能被创建它的函数引用),而无法被其它函数引用。
作用域为定义局部变量的函数,也就是说他只能在定义它的函数中使用,最值得注意的是只有在程序执行到定义它的模块时才能生成,一旦执行退出该模块则起变量消失。
如下图所示:变量a只能函数fun1使用,并且到函数结束时释放,变量b、c同样如此,不过主函数中定义的变量可以通过地址传递给其他函数使用。
//函数fun1
void fun1()
{
//定义为整型的局部变量a
int a = 0;
……
}
//函数fun2
int fun2()
{
//定义为整型的局部变量b
int b = 0;
……
return 0;
}
//主函数
int main()
{
//定义为整型的局部变量c
int c = 0;
……
return 0;
}
(3)、注意事项
a、主函数也不能使用其他函数中定义的变量。因为主函数也是一个函数,它与其他函数是平行关系。
b、不同函数中可以使用相同名字的变量,它们代表不同的对象,分配不同的单元,互不干扰。
如下图:函数fun1、fun2里面定义了名字相同的变量,这是正确的。
//函数fun1
void fun1()
{
//定义为整型的局部变量a
int a = 0;
……
}
//函数fun2
int fun2()
{
//定义为整型的局部变量a
int a = 0;
……
return 0;
}
c、当全局变量和局部变量同名的时候,在局部的范围内,全局变量则不在起任何作用,被屏蔽掉了,只会选择局部变量,因为变量的使用,是就近原则,如果在就近的作用域中,存在同样的同名变量,则就在最近的同名变量中起作用,不会向更大的范围内去寻找变量。
如下图:函数fun里传入的是局部变量a。
//定义为整型的全局变量a
int a = 0;
//主函数
int main()
{
//定义为整型的局部变量a
int a = 0;
fun(a);
……
return 0;
}
d、在一个函数内部,可以在复合语句中定义变量,这些变量只在本复合语句中有效,这种复合语句也称为“分程序”或“程序块”。
复合语句是由若干条语句组合而成的一种语句,在C51中,用一个大括号“{ }”将若干条语句括在一起就形成了一个复合语句,复合语句最后不需要以分号“;”结束,但它内部的各条语句仍需以分号“;”结束。
复合语句的一般形式为:
{
局部变量定义;
语句1;
语句2;
}
如下图:变量a、b、c只能在{}里面使用。
{
int a = 0;
int b = 0;
int c = 0;
a = b + c;
printf("%d",a);
}
e、形参变量在函数体内的定义,此时定义的变量都是局部变量,实参的数值传递给形参,也相当于给局部变量赋值的过程。
在函数fun( int a, int b)中,变量a、b是形参变量
如下图:变量a、b只能在函数fun内使用。
void fun(int a,int b)
{
……
}
二、常量
1、常量是什么?
常量的广义概念是:“不变化的量”(例如:在计算机程序运行时,不会被程序修改的量。
2、常量的分类 (1)、字面常量
常量一般从其字面形式即可判断。这种常量称为字面常量或直接常量。
0、1、2、3等为整型常量。
1.2、1.3、6.6等为实型常量。
‘a’、‘b’、‘c’、‘d’为字符常量。
在定义变量时,如果加上关键字const,则变量的值在程序运行期间不能改变,这种变量称为常变量。
在C语言中,用const修饰的,本质是变量但不能直接修改,有着常量的属性
pai 被称为 const 修饰的常变量, const 修饰的常变量在C语言中只是在语法层面限制了变量 pai 不能直接被改变,但是 pai 本质上还是一个变量的,所以叫常变量。
#include
int main()
{
const float pai = 3.14f; //这里的pai是const修饰的常变量
pai = 12.22;//在这尝试赋值,但是其实是不能直接修改的!这是错误的写法!
retrurn 0;
}
(3)、#define 定义的标识符常量
语法#define是 C语言 和 C++ 中的一个预处理指令,其中的“#”表示这是一条预处理命令·。凡是以“#”开头的均为预处理命令,“define”为宏定义命令,“标识符”为所定义的宏名。#define的部分运行效果类似于word中的ctrl+F替换,与常量const相似但相比有着无法替代的优势。
预编译不是编译,而是编译前的处理。这个 *** 作是在正式编译之前由系统自动完成的。
用法很简单,可以用宏 代替一个在程序中使用的常量
宏所表示的常量可以是 数字、字符、字符串、表达式。其中最常用的是数字。
a、 #define 标识符 常量
#include
#define MAX 100 //用MAX替换整数100
int main()
{
printf("%d\n",MAX);//可以用MAX直接代替输出100
int num = MAX;//可以用来赋值
printf("%d\n",num);
return 0;
}
b、#define 标识符 字符串
#include
#define STR "abcdef" //用STR代替字符串abcdef
int main()
{
printf("%s\n",STR);//可以用STR直接代替输出abcdef
char arr[] = STR;//可以用来赋值
printf("%s\n",arr);//输出
return 0;
}
c、#define 标识符 表达式
#include
#define M (a+b)//用M代替(a+b)
int main()
{
//定义变量a、b、add
int a =0;
int b =0;
int add = 0;
//这个式子其实是add = (a+b) + (a+b);
add = M+M;
//输出
printf("max = %d\n",add);
return 0;
}
有参宏定义
#define 标识符(参数1,…,参数n) 表达式 。
(其中,在"被标识符代表的字符串"中出现的形参将在使用时被实参替代,就像写函数一样。)
#include
#define MAX(a,b) (a > b)?a : b
int main()
{
//定义三个变量x,y,max
int x = 0;
int y =0;
int max = 0;
//输入
scanf("%d%d",&x,&y);
//传入变量x,y,用x代替a,用y代替b,求出最大值并赋给max
max = MAX(x,y);
//输出
printf("max = %d\n",max);
return 0;
}
注意
当宏参数里面有另一个宏的时候,参数里的宏不会生效!
在用#define 定义时 ,可以用斜杠(“\”) 续行,并且最后不加分号!
(4)、枚举常量
枚举常量的本质是数字由字符来表达(使其意义表达更加明确)
语法:enum 枚举类型名{常量1,常量2,常量3,…};
枚举元素本身由系统定义了一个表示序号的数值,从0 开始顺序定义为0,1,2…。如在week中,SUNDAY值为0,MONDAY值为1, …,SATURDAY值为6。
enum Week
{
SUNDAY,
MONDAY,
TUESDAY,
WEDNESDAY,
THURSDAY,
FRIDAY,
SATURDAY
};
//输出结果:1 5 0
printf("%d\n",MONDAY );
printf("%d\n",FRIDAY );
printf("%d\n", SUNDAY);
//注:枚举常量的默认是从0开始,依次向下递增1的
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)