看得懂的C语言--变量、常量

一、变量

1、变量是什么?

变量,是计算机语言中能储存计算结果或能表示值的抽象概念。

简单来说:变量在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 <stdio.h>
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’为字符常量。

(2)、const 修饰的常变量

在定义变量时,如果加上关键字const,则变量的值在程序运行期间不能改变,这种变量称为常变量。

在C语言中,用const修饰的,本质是变量但不能直接修改,有着常量的属性

pai 被称为 const 修饰的常变量, const 修饰的常变量在C语言中只是在语法层面限制了变量 pai 不能直接被改变,但是 pai 本质上还是一个变量的,所以叫常变量。

#include <stdio.h>

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 <stdio.h>
#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 <stdio.h>
#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 <stdio.h>
#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 <stdio.h>
#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的

  • 12
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值