C-2 变量与常量

如何定义变量

变量即是可以改变的量,例如年龄,体重等等。而不可改变的量就是常量,这个放在后面具体来说。回归到问题,在C语言中我们如何去创建一个变量呢?又有怎样的格式呢?

简单来说就是 “数据类型+变量名字 = 0” ,当然后面不去赋值在语法上也是允许的,但是不推荐。举个实际的例子:int age = 20;            float weight = 70.0;

既然变量是可变的,那不妨放到代码中试试看。

#include <stdio.h>

int main()
{
    int age = 40;
    
    age = age + 1;
    printf("%d\n",age);

    return 0;
}

运行得到结果是41表明运行成功,这也说明了变量是可变的

这段代码与昨天的代码中都出现了 %d ,意思是打印一个整型,与之类似的还有 %f  和 %lf 分别对应着打印 float 和 double

---------------------------------------------------------------------------------------------------------------------------------

变量的分类

变量分为全局变量和局部变量。为便于理解以下列代码为例:

#include <stdio.h>

int a = 123;//全局变量

int main()
{
    int a = 456;//局部变量
    printf("%d\n",a);

    return 0;
}

如上面注释的一样,在花括号外面的是全局变量,在花括号内部的就是局部变量。有个问题是当这段代码运行起来时, printf 打印出的是123还是456呢?换句话说就是全局变量与局部变量名字冲突时,哪个优先级更高。根据结果是456可以得出是局部优先。当然最好的方式还是避免名字冲突的尴尬情况。

---------------------------------------------------------------------------------------------------------------------------------

求和代码

#include <stdio.h>

int main()
{
    int a = 0;
    int b = 0;
    int sum = 0;
 
    scanf("%d %d", &a, &b);
     
    sum = a + b;
    printf("sum = %d\n",sum);

    return 0;
}

这里引入了一个新函数 scanf ,这是一个输入函数。具体格式如上,具体含义为:

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

""双引号内的两个%d代表输入的内容

&a代表将前面第一个%d所输入的内容存放到a中,&b代表将前面第二个%d所输入的内容存放到b。

而在这之前我们分别创建了变量a,b和sum用于存放,且sum = a + b ,这时用 printf 打印出最终结果也就是sum,这样就可以了。

如果使用的是VS编译器,可能会出现报错。这是因为VS推荐使用 scanf_s 函数,但这个是VS自带的函数,不是C语言标准规定的,放到其他编译器里是跑不起来的,为使这段代码通用,仍就使用 scanf 函数,解决方法在报错中也有提到,就是在源文件的第一行加入 #define _CRT_SECURE_NO_WARNINGS 1

---------------------------------------------------------------------------------------------------------------------------------

变量的作用域和生命周期

#include <stdio.h>

int A = 2023;

int main()
{
    printf("1:%d\n", A );

    {
        int B = 824;

        printf("2:%d\n", B );
        printf("3:%d\n", A );
    }

    printf("4:%d\n", B );

    return 0;
}

分析上面这段代码不难发现,A是全局变量,B是局部变量。当运行的时候 printf("4:%d\n", B ); 就会报错,原因在于B是局部变量的作用域就是局部变量的所在局部范围。而 printf("3:%d\n", A ); 没有报错可以得出全局变量的作用域是整个工程

但当在这个工程中新建一个源文件编写代码如下:

#include <stdio.h>

int main()
{
    printf("%d\n", A );
    return 0;
}

既然全局变量的作用域是整个工程,那么在此个源文件中没有创建全局变量A,能否跨文件使用呢?运行结果告诉我们是会报错的。

解决方法也很简单,就是在这个源文件中声明一下这个变量就可以正常使用了,有些类似于使用 printf 前要 #include <stdio.h> 声明。

​
#include <stdio.h>

extern int A;

int main()
{
    printf("%d\n", A );
    return 0;
}

​

如上所示,在开头使用 extern 声明即可正常运行。

变量的生命周期指的是变量的创建到变量的销毁之间的一个时间段。

局部变量的生命周期:进入局部范围生命开始,出局部范围生命结束。

全局变量的生命周期:程序的生命周期。

=========================================================================

常量的四种分类

1.字面常量

2. const 修饰的常变量

3. #define 修饰的标识符常量

4.枚举常量

---------------------------------------------------------------------------------------------------------------------------------

字面常量

int main()
{
    3.14;
    2023;
    'a';
    "abcdef";

    return 0;
}

---------------------------------------------------------------------------------------------------------------------------------

const 修饰的常变量

#include <stdio.h>
 
int main()
{
    int A = 2023;
    A = 824;

    printf("A = %d\n", A );
    
    return 0;
}

上面这段代码的输出结果是824,不难发现这是一个变量。而当在 int A 前面加上 const 修饰,此时A 就变为了一个常变量,不可以被下面的A = 824 改变,运行时也会报错“左值指定const报错”错误代码如下:

​
#include <stdio.h>
 
int main()
{
    const int A = 2023;
    A = 824;

    printf("A = %d\n", A );
    
    return 0;
}

​

常变量的本质是变量,具有常量不能被改变的属性。在需要常量的地方,常变量是不可以的,会报错。

---------------------------------------------------------------------------------------------------------------------------------

#define 修饰的标识符常量

#include <stdio.h>
#define MAX 2023

int main()
{
    int a = MAX;
    printf("a = %d\n",a);
    
    return 0;
}
    

以上代码输出结果就是2023,而 MAX 就是被定义的常量,不可被更改

---------------------------------------------------------------------------------------------------------------------------------

枚举常量

enum Sex
{
     MALE,
     FEMALE,
     SECRET
};

这就是枚举常量的定义,表示这种枚举类型的变量的未来可能取值

​#include <stdio.h>

enum Sex
{
     MALE,
     FEMALE,
     SECRET
};

int main()
{
    printf("%d\n",MALE);
    printf("%d\n",FEMALE);
    printf("%d\n",SECRET);

    return 0;
}

​

当将他们三个分别打印出来时得到:

0

1

2

这也就是说枚举常量是常量,他的值是从0默认开始的。

​
​#include <stdio.h>

enum Sex
{
     MALE,
     FEMALE,
     SECRET
};

int main()
{
    //MALE = 3//这样改会报错,因为这是常量

    printf("%d\n",MALE);//0
    printf("%d\n",FEMALE);//1
    printf("%d\n",SECRET);//2

    return 0;
}

​

​

常量是可以赋初值的

​
​#include <stdio.h>

enum Sex
{
     MALE = 3,//赋初值
     FEMALE,
     SECRET
};

int main()
{
    printf("%d\n",MALE);//3
    printf("%d\n",FEMALE);//4
    printf("%d\n",SECRET);//5

    return 0;
}

​

​

这样得到的输出结果就是:

3

4

5

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值