1. 首页
  2. IT资讯

编程学习解答:面向小白的C语言教程之变量和常量

变量和常量
1、什么是常量?什么是变量?
当我打开一个游戏,游戏人物的身高(假设是不变的),就是一个常量,游戏人物的血量,受到敌人的伤害就会减少,血量就是变量,在一个程序中,恒定不变的量叫常量,可变的量叫变量。
2、变量的命名规则
我们将程序中常量、变量、函数的名称称为标识符,标识符的命名规则如下:

  • 只能由字母、数字和下划线组成,且不能以数字开头。
  • 严格区分大小写。
  • 不能使用C语言中的关键字。
  • 同一程序中,变量和函数都不可以重复定义。
  • 满足以上四点的任意命名都是合法的,但我们为使程序便于阅读,通常使标识符名称具有实际含义,例如我写一个加法函数,那么我可以命名为add。

例如:int 3a就不对,因为不能以数字开头,int void也不对,因为void是关键字。
new在C语言中可以用,但在C++中不能用,因为new是C++的关键字
3、定义变量
什么叫定义变量?
计算机是一种精确的,有条理的机器,要将信息存储在计算机中,必须指出信息的存储位置和所需的内存空间,定义语句的作用就是指明存储类型并提供位置标签。
比如int a;,这条语句提供了两条信息:需要的内存以及该内存单元的名称。即这条语句指出程序需要足够的储存空间来储存一个整数,int表示整数类型。编译器负责分配和标记内存的细节。C/C++可以处理多种类型的数据,整数可以为正,也可以为负。
为什么变量必须定义呢?
有些语言在使用新名称时就会创建新的变量,而不需要显示地定义。这看上去对用户比较友好,事实上从短期上来看确实如此。但有时候你可能会错误的拼写变量名,在不知情的情况下创建了一个新的变量,而你把它当作旧的变量使用,就会产生很难察觉的问题。
什么是初始化变量呢?
给变量赋予一个初始值,就意味着将这个变量初始化了。我们可以在定义变量的同时初始化变量,也可以先定义再初始化。
定义并初始化的方式如下:
定义后初始化
int a;//定义变量
int b;//定义变量
int c;//定义变量

a = 1;//初始化变量
b = 2;//初始化变量
c = c;//初始化变量

printf("%d %d %d", a, b, c);

此时会打印出:
1 2 3

定义同时初始化:
int a = 1;//定义时初始化
int b = 2;//定义时初始化
int c = 3;//定义时初始化
printf("%d %d %d", a, b, c);

打印结果为:
1 2 3

多个变量同时定义并初始化:
int a = 1, b = 2, c = 3;//同类型的变量一起定义并初始化
printf("%d %d %d", a, b, c);

打印结果为:
1 2 3

多个变量同时定义后初始化:
int a, b, c;
a = 1;
b = 2;
c = 3;
printf("%d %d %d", a, b, c);

打印结果为:
1 2 3

多个变量同时定义并部分初始化:
int a, b, c = 3;
printf("%d %d %d", a, b, c);

此时无法打印,会提示未初始化变量a,b。int a, b, c = 3;这条语句相当于定义了3个变量但只初始化了c,并不是将数值3赋值给了所有变量,这是新手很容易犯错的地方。
为什么一定要初始化?
事实上不初始化也可以编译通过并且执行,C语言在这方面拥有很高的自由度,但新版的编译器添加了相关的检错机制,因为哪怕不初始化可以通过编译并且执行,使用到了未初始化变量依然被认为是程序中的错误。一个变量不初始化就没有存在的意义,更重要的是,如果忘记初始化一个变量,我们可能就会从其它程序遗留下来的内存中获取到垃圾数据。
当我们运行一个程序时,电脑需要给程序中的变量和常量分配内存,运行程序会在内存地址上标识,告诉电脑”这块内存我占用了,别的程序不能用“。,而关闭程序时,内存里的垃圾数据可能并不会被回收,只是在地址上标识,”这块内存我不用了,谁想用可以拿去用“,这时候如果你的某个变量正好用到了其中的一个内存空间,你初始化的时候就会用你想要的值将前面的程序遗留的垃圾数据覆盖掉,而如果不初始化,你的变量就会获取到这些垃圾数据。
4、变量的内存机制
在计算机中,变量储存在内存中,每一个变量都会被分配到一块内存空间,内存空间中储存的就是变量的值。内存空间里的值变化,变量的值也就会变化。一个内存空间里同一时间只能保存一个值,如果有新的值储存,就是覆盖掉旧值。每一个内存单元都有编号,编号就是此内存单元对应的地址。
我们可以将一个变量的地址打印出来:
#include<stdio.h>
#include<stdlib.h>
int main() {
int num = 100;
printf("%d,%p", num, &num);//%d是以十进制形式打印,%p用来打印地址,十六位的十六进制,&num是取地址,这行代码意思是将num的值以十进制形式的形式打印出来,将num的内存地址以十六位十六进制的形式打印出来。
num = 150;//此处插入断点
system("pause");
return 0;
}

我们进行调试:
断点出输出结果为:
100,000000EF46CFFC34

这说明此时num的值为100,内存地址为0x000000EF46CFFC34。
我们点击【调试】- 【窗口】 – 【内存】,讲上面输出的内存地址粘贴到地址栏里,点击继续运行可以看到内存地址中的变量值的变化:

编程学习解答:面向小白的C语言教程之变量和常量

当我们计算1+2 =3时,
代码如下:
void main(){
int a;
int b;
int c;
a = 1;
b = 2;
c = a + b;
}

当我们定义变量时,计算机为a、b、c分别分配了一个整数类型的内存空间,每一个内存空间对应一个内存地址。当给a赋值1时,运算器里产生一个数据1,控制器找到a的内存地址,并将数据1储存到此地址对应的内存里。运用同样的方法给b赋值。计算c = a + b时,在运算器完成计算,计算结果是3,由控制器找到c的地址,将数值3储存到此的内存空间里。这样就完成了一个基础的加法运算。
5、定义常量
前面讲了定义变量,定义常量方式如下:
常量命名规则在语法上和变量一样,但规范上不尽相同,常量命名一般由大写字母和下划线组成。
在变量定义前面加上const(constant):
#include<stdio.h>
void main(){
const int A = 1;
printf("%d", A);
}

打印结果为:
1

如果这样写:
void main(){
const int A = 1;
A = 2;
}

就会报错,这是因为常量是只可读不可写的
因此常量在定义是就需要初始化:
#include<stdio.h>
void main() {
const int A = 1, B = 2, C = 3;
printf("%d %d %d", A, B, C);
}

打印结果为:
1 2 3

我们还可以使用宏定义的方式来定义常量:
#include<stdio.h>
void main(){
#define X 100
printf("%d", X);
}

打印结果:
100

宏定义的本质是字符的替换,#define X 100本质上是将程序中的所有X替换为100,且是批量替换,即如果有多个X,那么在将#define X 100中的100改为101时,每一个X都会由100变成101。
#define可以替换程序中的任何字符,比如我用void取代_那么程序可以写为:
#define _ void
_ main(){

}

这样也是合法的且可以正常运行。
为什么#define X 100后面不加分号,这是因为如果加了分号;那么就意味着X替换的是100;而不是100。
宏定义可以替换任何字符,包括括号(){}等字符,甚至可以将所有关键字和函数替换成中文,这样就开发出了一套“中文编程语言”。

原文始发于:编程学习解答:面向小白的C语言教程之变量和常量

主题测试文章,只做测试使用。发布者:IT资讯科技,转转请注明出处:http://www.cxybcw.com/19895.html

联系我们

13687733322

在线咨询:点击这里给我发消息

邮件:1877088071@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息

QR code