C语言基础03 常量与变量

C语言基础03 常量与变量,第1张

常量与变量 (1)常量与变量的定义
  • 数据类型的使用,很大一部分是用来创建变量。
  • 生活中有些值是保持不变的(比如:血型、圆周率等等)
  • 有些值是可变的(比如:年龄、体重等等)

而这些值,在C语言当中,不变的值用常量的概念来表示,能改变的值,用变量来表示。

(2)定义变量的方法
int age = 22;      //定义一个整型
float weight = 150.5f;   //定义一个单精度的浮点数
char name = 'c';   //定义字符A
(3)变量的分类

1.全局变量

函数外定义的变量称为全局变量。

简单来说: { } 外部定义的都为全局变量

2.局部变量

函数内定义的变量称为局部变量

简单来说:{ } 内部定义的都为局部变量

全局变量与局部变量的注意点
若局部定义与全局定义名字冲突的情况下,局部变量优先

正常情况下:
 //全局变量a
 int a =100;
 
 int main(){
  //局部变量b
  int b =10;
}

若全局变量与局部变量名字冲突:
int a=100;  //全局变量a

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

输出的结果为10,因为在全局变量与局部变量名字冲突的情况下,局部优先

(4)变量的使用

计算两个整数的和

#define _CRT_SECURE_NO_WARNINGS 1  //防止使用scanf函数报错

#include 

int main()
{
  int a = 0;
  int b = 0;
  int sum = 0;
  scanf("%d %d",&a,&b);  //scanf为输入函数
  sum = a + b;
  printf("sum = %d\n",sum);

  return 0;
}

使用scanf函数报错解决办法:
在源文件的第一行,加上:

#define _CRT_SECURE_NO_WARNINGS 1

scanf_s函数 是VS编译提供的,不是C语言标准规定的。

(5)变量的作用域和生命周期
  1. 作用域

局部变量的作用域:就是变量所在的局部范围
全局变量的作用域:整个项目

int a =2022; //全局变量a

int main(){
 printf("1:%d\n",a);  //第一次打印a
   {
     printf("2:%d\n",a) //第二次打印a
     int b=10;   //局部变量b
     printf("b = %d\n",b); //第一次打印b 
   }
   printf("3:%d\n",a); //第三次打印a
   printf("b=%d\n",b); //第二次打印b

  return 0;
}

输出结果为:
1:2022
2:2022
b = 10
3:2022
报错

从上可以看出全局变量a不论是在哪都可以打印出来,而局部变量b只能在中括号的范围内打印,在main函数中则打印提示错误。

跨文件的调用

上图定义了int a,如果我想在同一个项目下另一个文件调用,则只需要在另一个文件中声明变量,就可以使用上个文件的变量a

extern int a;  //声明变量

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

控制台输出a的值
  1. 生命周期
  • 变量的生命周期:变量的创建和销毁之间所存在的时间段
  • 局部变量的生命周期:进入局部范围生命开始,出局部范围生命结束。
  • 全局变量的生命周期:这个程序的生命周期。
int main()
{
  {
     int a =2022;
     printf("%d\n",a);
     //a的生命周期等于于这个中括号的范围,如果出了这个中括号,它被销毁,则生命周期结束
  }
   return 0;
}
(6)常量

C语言中的常量分为以下几种:

  • 字面常量
  • const 修饰的常变量
  • #define 定义的标识符常量
  • 枚举常量
  1. 字面常量

定义的普通常量

int main(){
 3.14;  //浮点型常量
 2022;  //整型常量
 "chen"; //字符串常量
}
  1. const 修饰的常变量

const定义的是常变量 但不等于 常量

定义出来的变量都可以被改变

int main(){

int num = 10; //定义变量num=10
num = 20;
printf("num = %d\n",num); 

return 0;
}

输出的num为20,因为num在定义后被改变

但若是由const 定义的变量,则不能被改变

int main(){

const int num = 10; //num是常变量 - 具有常属性(不能被改变的属性) 
num = 20;
printf("num = %d\n",num); 

return 0;
}

控制台报错:
左值被const指定

注意:C语言中,数组在定义的时候,数组的长度通常是由一个常量来定义

int main(){

int arr[10] = {0}; //创建一个数组,有10个元素
int n = 10;   //定义一个变量n为10
int arr2[n] = {0}; //n是变量,数组必须填入一个常量值才可以创建

return 0;
}

控制台报错:
表达式必须含有常量值
数组定义应输入常量表达式
不能分配常量大小为0的数组

若以const 修饰的常变量来定义数组也不行

int main(){

int arr[10] = {0};  //创建一个数组,有10个元素
const int n = 10;   //用const修饰一个常变量n为10
int arr2[n] = {0};  //n是常变量

return 0;
}

控制台报错:
表达式必须含有常量值
数组定义应输入常量表达式
不能分配常量大小为0的数组

上面两段代码都得到同样的报错信息,所以虽说const修饰的变量虽然是常量值,但不是真正意义上的常量,本质上还是变量。

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

#define MAX 10000

int main(){
  //MAX = 20000; //报错,因为前面MAX是#define定义的常量,所以不能改变它的数值
  int n = MAX;
  printf("n=%d\n",n);
}

控制台输出:
n = 10000

4.枚举常量

可以一一列举的常量

例如:性别、

下面以性别为例

 enum Sex
 {
   //枚举常量
   //这种枚举类型的变量的未来可能取值
   MALE,     // MALE = 3 ,若赋给MALE初值为3
   FEMALE,
   SECRET
 };
  
 int main(){
   enum Sex s =MALE;
    
   printf("%d\n",MALE);
   printf("%d\n",FENALE);
   printf("%d\n",SECRET);
 
   return 0;
  }

控制台输出:
0   //3
1   //4
2   //5
//从输出可以看出枚举常量的值是从0开始,默认第一个值为0
//若给MALE赋初值为3,则后面的值依次后移

枚举常量的值是从0开始,默认第一个值为0

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/873230.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-13
下一篇 2022-05-13

发表评论

登录后才能评论

评论列表(0条)

保存