C语言学习笔记二(变量)

1. 变量的定义

变量定义的基本语法为:

数据类型 变量名;
  • 数据类型:决定变量可以存储的数据类型,如int(整型)、float(单精度浮点型)、double(双精度浮点型)、char(字符型)等。

  • 变量名:由用户自定义,必须遵循标识符的命名规则。

示例:
int age;
float height;
char grade;

2. 变量命名规则

变量名是变量的标识符,必须遵循以下规则:

  1. 以字母或下划线开头:变量名的第一个字符是必须字母(A-Z或a-z)或下划线(_),不能以数字开头。

    • 正确示例:int a = 1;int _num = 2;

    • 错误示例:int 1var = 3;(以数字开头)

  2. 只能包含字母、数字和下划线:变量名中不能包含空格、标点符号或其他特殊字符。

    • 正确示例:int myVar = 10;

    • 错误示例:int my-var = 20;(包含-

  3. 区分大小写:C语言是区分大小写的语言,因此Varvar是两个不同的变量。

    • 示例:int Var = 1;0int var = 20; 是两个不同的变量。

  4. 不能使用C语言的关键字:变量名不能与C语言的关键字(如intfloatifwhile等)相同。

    • 错误示例:int int = 10;int是关键字)

3. 变量定义规则

  1. 必须指定数据类型:每个变量在定义时必须明确指定其数据类型(如intfloatchar等)。

    • 示例:int age;float price;char grade;

  2. 可以在同一行定义多个变量:如果多个变量的数据类型相同,可以在同一行定义。

    • 示例:int a = 1, b = 2, c = 3;

  3. 变量名必须唯一:在同一作用域内,不能定义两个同名的变量。

    • 错误示例:

    • int x = 10;
      int x = 20; // 错误:重复定义

4. 变量初始化规则

  1. 变量可以在定义时初始化:在定义变量时,可以为其赋一个初始值。

    • 示例:int count = 0;float price = 19.99;

  2. 未初始化的变量可能包含垃圾值:如果变量未初始化,其值是不确定的(可能是内存中的随机值)。

    • 示例:

      int num; // 未初始化,num的值是不确定的
      printf("%d\n", num); // 输出结果可能是任意值

 

5.变量的作用域规则

变量的作用域决定了变量在程序中的可见性范围:

  1. 全局变量:定义在所有函数之外,作用域为整个程序。

    • 示例:

      int globalVar = 10;
      
      void func1() {
          printf("%d\n", globalVar); // 可以访问
      }
  2. 局部变量:定义在函数或代码块内,作用域为所在的代码块。

    • 示例:

      void func() {
          int localVar = 20; // 局部变量
          printf("%d\n", localVar); // 可以访问
      }
    • 注意:局部变量在代码块外不可见。

  3. 嵌套作用域:如果局部变量与全局变量同名,则局部变量会隐藏全局变量。

    • 示例:

      int globalVar = 10;
      
      void func() {
          int globalVar = 20; // 局部变量
          printf("%d\n", globalVar); // 输出20
      }

 

6. 变量的存储类型规则

C语言支持不同的存储类型,每种存储类型有其特定的规则:

  1. 自动存储类型(auto

    • 默认存储类型。

    • 生命周期:从定义到函数结束。

    • 作用域:所在代码块。

    • 示例:auto int x = 10;auto关键字可省略)

  2. 静态存储类型(static

    • 生命周期:整个程序运行期间。

    • 作用域:所在代码块。

    • 示例:static int count = 0;

  3. 外部存储类型(extern

    • 生命周期:整个程序运行期间。

    • 作用域:整个程序。

    • 用于在多个文件中共享变量。

    • 示例:

      // 文件1.c
      int globalVar = 10;
      
      // 文件2.c
      extern int globalVar;
  4. 寄存器存储类型(register

    • 建议将变量存储在CPU寄存器中,以提高访问速度。

    • 生命周期:从定义到函数结束。

    • 作用域:所在代码块。

    • 示例:register int loopVar;

 

7. 变量的类型转换规则

  1. 隐式类型转换:由编译器自动完成,通常从低精度类型转换为高精度类型。

    • 示例:

      int a = 10;
      float b = a; // 自动将int转换为float
  2. 显式类型转换(强制类型转换):通过类型转换运算符完成,可能丢失精度。

    • 示例:

      float f = 10.5;
      int i = (int)f; // 强制将float转换为int,结果为10

 

8. 变量的地址规则

  1. 每个变量都有一个唯一的内存地址,可以通过&运算符获取。

    • 示例:

      int num = 10;
      printf("Address of num: %p\n", &num);
  2. 不同变量的地址不同,即使是同名的局部变量。

 

9. 变量的修饰符规则

  1. const修饰符

    • 定义用于常量变量,值不能被修改。

    • 示例:const int MAX = 100;

  2. volatile修饰符

    • 用于修饰可能被外部修改的变量,如硬件寄存器。

    • 示例:volatile int status;

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值