咕咕王小谢的C语言之路————第一章 初遇C语言 第三集 变量与常量

本文是咕咕王小谢的C语言学习系列,重点讲解变量与常量。内容涵盖变量的定义方法、分类、使用,作用域和生命周期,以及常量的四种类型。强调了初始化变量的重要性,局部变量与全局变量的区别,以及如何使用scanf函数进行输入操作。此外,还提到了_CRT_SECURE_NO_WARNINGS宏的作用和常量的四种形式。
摘要由CSDN通过智能技术生成

小谢同学:咕咕咕......

C语言:咕你个头呀,这段时间你去哪里啦?究极鸽王,詹姆斯韦伯望远镜都没你能鸽...

小谢同学:呜呜呜,别骂了,这段时间,我忙着和老师做项目还有准备期末考试了,让大家久等了!骚瑞啦!

承接上集!我们学习了数据类型的知识,接下来,小谢同学来介绍变量与常量。

首先,从字面意思可以知道变量就是变化的量,比如说年龄、体重等。而常量则是不变的量,比如说性别、身份证号码等。

本集介绍分为以下这几个内容:

3.1 定义变量的方法

3.2 变量的分类

3.3 变量的使用

3.4 变量的作用域和生命周期

3.5 常量

3.1 定义变量的方法

在定义变量的时候,我们通常会用类型+变量来定义变量,例如:

int main()
{
    int age = 18;
    char ch = 'x';
    float a = 37.7f
    return 0;
    
}

不难发现,这些变量都具有这种特征。不过有些同学会说:“为什么你定义变量要初始化?我们老师说可以不用......”

其实,在创建变量的时候,可以不用初始化变量,只是为了以后我们在分析代码的时候能够更加好分析代码。如果一个局部变量没有初始化,那么,它在后面运行的时候,就会是随机值,会导致后面的代码无法预测。因此,对于初学者来说在变量创建时,最好在创建变量时初始化变量哦!

3.2 变量的分类

变量一共分成两大种,他们分别是局部变量全局变量

局部变量:代码块内(大括号内)定义的变量。

全局变量:代码块外(大括号外)定义的变量。

在这里,咕咕王小谢给大家补充一点:在main函数里面的变量一定是局部变量,但是局部变量不一定在main函数里面!你品你细品!

为了大家能够更加深入的了解这两个定义,现在,我来举一个例子来引出一个很重要的性质,例子如下:

#include <stdio.h>
int a = 0;
int main()
{
    int a = 10;
    printf("%d\n",a);
    return 0;
}

 大家觉得这个代码运行出来是多少呢?不能运行?0?10?

来!上号!

不难发现,在VS上面运行发现运行出来的是10。但是这又是为什么呢?

欸~,马上就告诉你!

首先,不容置疑的是这个代码是没有什么问题的,只不过这是一个规则罢了——当局部变量和全局变量同名时,局部变量会优先使用! 

但是,如果当printf函数在“int a =10;”前面时,这个时候打印出来的a则是0,不过当你用VS的调试功能((Fn)+F10)时,你又会发现当这个函数的调试完之后,a变量的值又是10。

3.3 变量的使用

在介绍变量的使用之前,我们来看一个代码先!代码如下:

#include <stdio.h>
int main()
{
    int a = 10;
    int b = 57;
    int sum = 0;
    scanf("%d %d",&a,&b);
    printf("这两个数的和为");
    sum = a + b;
    printf("sum = %d",sum); 
    return 0;
}

在这里,我先介绍一下头文件——stdio.h

他的英语全称为standard input output (标准输入输出流)。

在调用函数的时候,我们总是要用到它!

而在这串代码里面有一个新的函数——scanf

没错,他就是我们经常说的输入函数,和printf是一对hxd,在使用这个函数的时候,我们通常以这个格式去使用:

假设这里要输入两个整型的变量a、b,则该函数为

scanf("%d %d",&a,&b);

前面双引号里面的是变量的输入格式,且输入格式的数量和要输入的变量个数一致,同时要注意,在每一个变量的输入格式之间,用一个空格隔开,最后在双引号外面输入变量名称,每一个变量名称用逗号隔开,同时,变量前面用取地址操作符“&”

按下ctrl +(Fn)+F5后,输入两个数字,便可得到这两数的和。

在这里,要给大家一些小提示:我用的编译器较老——VS2010版的,这个版本在设置变量的时候一定得放在最前面,不然会报错。

 很明显,我们发现事实果然如此,那是因为C99标准之前有一个规定:变量要创建在当前代码块的最前面!而C99标准之后就是哪里需要变量就在哪里定义。

细心的小伙伴都发现了我在每次写代码的时候都在最前面加上了这样一行字:

#define _CRT_SECURE_NO_WARNINGS 1

为什么要加这行字呢?

那是因为如果不加这行字,VS编译器就会觉得scanf那样的函数以为是不安全的,于是就会让你用它自己自带的函数(这些函数是他们认为安全的函数,并且这些函数的移植性不好,只能在VS编译器下工作)可能会发出警告甚至会不给运行,但是,我们都知道scanf函数是C语言中通用且移植性好。因此,为了解决这一问题,我们就得写上这么一句话,来让编译器觉得我们用的函数是安全的

你看这个代码没有那句话后,马上见效了!

 3.4 变量的作用域和生命周期

变量的作用域:一个用来限制变量起作用的范围

变量的生命周期:变量在创建出来到被销毁的一个时间段

这两个还是挺容易混淆的,大家要注意啦!一个是时间段,一个是作用的范围,不要认为当经历变量从创建到出了这个作用范围(作用域)的这个过程的时间,就是一个生命周期,如果他前面有一个static修饰呢,那么,这时就不能认为当经历变量被创建后到出了作用域的这个过程的时间就是一个生命周期了,这时就会让大家能够对这两个概念有更深刻的理解啦!有兴趣的可以先去看看哈!后面会介绍的!

对于局部变量来说作用域是变量所在的局部范围(代码块内)!而它的生命周期则是进入作用域生命周期开始,出作用域生命周期结束(static修饰的变量另作考虑!)。

而对于全局变量的作用域是整个工程,而它的生命周期是整个程序的生命周期。

3.5 常量

C语言常量被分为以下四种:

1. 字面常量

2. const修饰的常变量

3. #define定义的标识符常量

4. 枚举常量

1. 字面常量

int main()
{
    3;
    2345;
    return 0;
}

这些单独写的一些数字就是一些字面常量!

2. const修饰的常变量

有些小伙伴就会问:“啊~?什么是常变量?又有常量又有变量?”

哈哈,其实并不是,来请看下面这串代码就明白了!

 你看,在这个代码里,他写着“应输入常量表达式”,可以看出这个变量a并不是常量表达式,因此我们可以断定这还是一个变量,那么这个const修饰的变量到底是什么样的变量呢?

const修饰的是常属性的变量,实质上还是一个变量!只是在语法层面限制了变量的变化而已!

但是,在C99之后,就有上面那个图的编程语法了——他被命名为变长数组,允许变量来指定数组的长度。

3.#define定义的标识符常量

来,上代码!

int main()
{
    #define max 10
    int arr[max] = {0};
    return 0;
}

  不难发现,max是一个常量。

#include <stdio.h>
enum Sex
{
    MALE,
    FEMALE,
    SECRET
};
int main()
{
    printf("%d\n",MALE);
    printf("%d\n",FEMALE);
    printf("%d\n",SECRET);
    return 0;
}

 

可以看见,枚举常量和函数有些不同!你看枚举常量中会有enum这一个东西,他是用来定义枚举常量类型。而将上面这几行代码运行后会发现打印出来的是常量,当我们试图去给这些量去赋值的时候,会发现出错,因此,我们可以推断这些量都是常量。当然从字面意思也可以看得出来。只是为了大家好理解哈哈哈

好啦,这一个内容搞完啦,我们下一次再见吧!

(小声哔哔,一定不鸽啦!!!(doge))

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值