C语言学习笔记(自用)(3):变量与常量

常量——不能改变的量(eg:身份证号、血型、性别)

变量——可以改变的量(eg:年龄、体重)

如何定义一个变量?

int age = 150;
float weight = 45.5f;
char ch = 'w';

变量分为两类:全局变量局部变量

#include <stdio.h>
int global = 2019;//全局变量
int main()
{
int local = 2018;//局部变量

int global = 2020;//局部变量
printf("global = %d\n", global);
return 0;
}

        简单的讲,在{}内部中定义的变量就是局部变量,在外部定义的就是全局变量。注意,这里在全局变量与局部变量中都定义了一个名为global的变量,这里是不冲突的,遇到同名变量时,局部变量优先,所以这段代码运行后,global的输出值为2020。当然,即使是不影响,还是建议大家在写代码时使用不同的变量名。

一个简单的示例:

#include <stdio.h>

int main()
{
int a = 0;
int b = 0;
int sum = 0;

printf("输入两个操作数:>");
scanf("%d %d", &a, &b);

sum = a + b;

printf("%d\n", sum);

return 0;
}

        输出输入函数(printf 和 scanf)是C语言中非常重要的两个函数,printf是输出函数,这里两处使用也正好展示了printf的两种形式,第一种就是将双引号中的字符串原样输出,注意,要是代码变成   printf("输入两个操作数:>\n");   这里 \n 是换行的意思,在输出“输入两个操作数:>”后换行,具体的区别可以自己在VS上尝试,区别是非常直观的。而第二处printf的是将sum这个变量以十进制输出的意思,%d 代表的就是以十进制的形式。

        scanf函数就是从键盘键入两个数据分别存储在a和b两个变量中,这里也使用了类似printf中的语法结构,这里&a代表a的地址,就是将一个十进制的数写入a的地址。

        这段代码运行后会报错,报错的原因是scanf函数:

 这里VS平台提示说建议使用scanf_s代替scanf,前者是VS提供的函数,在其他平台不兼容。

 在代码的第一行加入

#define _CRT_SECURE_NO_WARNINGS 1

即可。

变量的作用域和生命周期

        作用域(scope)是程序设计概念,通常来说,一段程序代码中所用到的名字并不总是有效/可用
的,而限定这个名字的可用性的代码范围就是这个名字的作用域。

1.局部变量的作用域是变量所在的局部范围

2. 全局变量的作用域是整个工程

#include <stdio.h>

int b = 1;

int main()
{

    int a = 0;
    printf("%d %d", a , b);

    return 0;
}
#include <stdio.h>

int b = 1;

int main()
{
    {
        int a = 0;
    }
    printf("%d %d", a , b);

    return 0;
}

        上面两段代码,第一个可以正常运行,第二个却不行,因为{}是局部变量a的作用域 ,第二段代码的printf函数运行时,a的赋值已经失效了,故不能输出a的值。而对于全局变量b,它的作用域是整个工程,故两种情况下都可以正常输出数值,但是,前文也提到过了,在遇到同名的局部变量是,在该局部变量的作用域内,局部变量优先,例如:

#include <stdio.h>

int a = 1;

int main()
{
    int a = 0;
    printf("%d", a);

    return 0;
}

        这里a的输出值就是0。 

        变量的生命周期指的是变量的创建到变量的销毁之间的一个时间段。
1. 局部变量的生命周期是:进入作用域生命周期开始,出作用域生命周期结束。
2. 全局变量的生命周期是:整个程序的生命周期。

很好理解,不过多解释。

接下来说常量:

C语言中的常量分为以下以下几种:
        1.字面常量
        2.const 修饰的常变量
        3.#define 定义的标识符常量
        4.枚举常量

#include <stdio.h>

int main()
{
    //字面常量演示
    3.14;//字面常量
    1000;//字面常量

    //const 修饰的常变量
    const float pai = 3.14f; //这里的pai是const修饰的常变量
    //pai = 5.14;//是不能直接修改的!

    //#define的标识符常量 演示
    #define MAX 100
    printf("max = %d\n", MAX);
    int a = MAX;
    printf("a = %d\n", a);

   enum Sex
    {
        MALE,
        FEMALE,
        SECRET
    };
    //括号中的MALE,FEMALE,SECRET是枚举常量

    //枚举常量演示
    printf("%d\n", MALE);
    printf("%d\n", FEMALE);
    printf("%d\n", SECRET);
    //注:枚举常量的默认是从0开始,依次向下递增1的

return 0;
}

        字面常量很好理解,就是一个数值。

        const 修饰的常变量,从代码中不难看出,就是在定义一个变量是,在变量类型前面加上const修饰,所以其本质上是一个变量,但是,在加上const后,变量的值会始终保持为定义的值,具有常数的性质,故称其为常变量。

        注意,如果在定义了一个常变量后,又重新对其赋值(在同一作用域内),例如代码第行备注掉的部分,代码会报错:

         #define 定义的标识符常量,格式在代码中,MAX就是常量100的代名词,在后面的程序中,可以直接用MAX代替100对变量进行赋值,例如代码中对a进行赋值,输出的a值为100。

        枚举常量的定义格式在代码中展示的也很清楚,Sex为常量名称,这里举的例子是性别:男、女、不确定,三种情况由上到下分别对应0~2的数值。

        这里给出这段代码的输出情况:

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值